2011-04-08 90 views
3

更新2:哪些付款已确认PayPal?

代码我currentlly有如下:

paypalplatform.php:

https://www.paypal-labs.com/integrationwizard/adaptive/code2.php

basic_payment.php:(中图4b在脚本 链接如下)

https://www.paypal-labs.com/integrationwizard/adaptive/paymenttypes.php

ipn.php:(IPN的听众)

https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNImplementation

如果在第二个环节的箱子上面是空的,只需要点击“重新开始”,直到你到点击下一步第4步,或点击这里:https://www.paypal-labs.com/integrationwizard/adaptive/main.php

更新1:

,我认为这是代码发起ŧ他付款,我需要在这里指定一个自定义值吗?如果是这样,怎么样?

<?php 
//------------------------------------------------- 
// When you integrate this code 
// look for TODO as an indication 
// that you may need to provide a value or take action 
// before executing this code 
//------------------------------------------------- 

require_once ("paypalplatform.php"); 


// ================================== 
// PayPal Platform Basic Payment Module 
// ================================== 

// Request specific required fields   
$actionType   = "PAY"; 
$cancelUrl   = "some url here"; // TODO - If you are not executing the Pay call for a preapproval, 
           //  then you must set a valid cancelUrl for the web approval flow 
           //  that immediately follows this Pay call 
$returnUrl   = "some url here"; // TODO - If you are not executing the Pay call for a preapproval, 
           //  then you must set a valid returnUrl for the web approval flow 
           //  that immediately follows this Pay call 
$currencyCode   = "USD"; 

// A basic payment has 1 receiver 
// TODO - specify the receiver email 
$receiverEmailArray  = array(
        'receivers email here' 
       ); 

// TODO - specify the receiver amount as the amount of money, for example, '5' or '5.55' 
$receiverAmountArray  = array(
        'receivers amount here' 
       ); 

// for basic payment, no primary indicators are needed, so set empty array 
$receiverPrimaryArray  = array(); 

// TODO - Set invoiceId to uniquely identify the transaction associated with the receiver 
//  You can set this to the same value as trackingId if you wish 
$receiverInvoiceIdArray  = array(
        '1234abc' 
       ); 

// Request specific optional or conditionally required fields 
// Provide a value for each field that you want to include in the request, if left as an empty string the field will not be passed in the request 
$senderEmail    = "";  // TODO - If you are executing the Pay call against a preapprovalKey, you should set senderEmail 
          //  It is not required if the web approval flow immediately follows this Pay call 
$feesPayer    = ""; 
$ipnNotificationUrl   = "some url here"; 
$memo     = "";  // maxlength is 1000 characters 
$pin     = "";  // TODO - If you are executing the Pay call against an existing preapproval 
          //  the requires a pin, then you must set this 
$preapprovalKey    = "";  // TODO - If you are executing the Pay call against an existing preapproval, set the preapprovalKey here 
$reverseAllParallelPaymentsOnError = "";  // Do not specify for basic payment 
$trackingId      = generateTrackingID(); // generateTrackingID function is found in paypalplatform.php 

//------------------------------------------------- 
// Make the Pay API call 
// 
// The CallPay function is defined in the paypalplatform.php file, 
// which is included at the top of this file. 
//------------------------------------------------- 
$resArray = CallPay ($actionType, $cancelUrl, $returnUrl, $currencyCode, $receiverEmailArray, 
         $receiverAmountArray, $receiverPrimaryArray, $receiverInvoiceIdArray, 
         $feesPayer, $ipnNotificationUrl, $memo, $pin, $preapprovalKey, 
         $reverseAllParallelPaymentsOnError, $senderEmail, $trackingId 
); 

$ack = strtoupper($resArray["responseEnvelope.ack"]); 
if($ack=="SUCCESS") 
{ 
    if ("" == $preapprovalKey) 
    { 
     // redirect for web approval flow 
     $cmd = "cmd=_ap-payment&paykey=" . urldecode($resArray["payKey"]); 
     RedirectToPayPal ($cmd); 
    } 
    else 
    { 
     // payKey is the key that you can use to identify the payment resulting from the Pay call 
     $payKey = urldecode($resArray["payKey"]); 
     // paymentExecStatus is the status of the payment 
     $paymentExecStatus = urldecode($resArray["paymentExecStatus"]); 
    } 
} 
else 
{ 
    //Display a user friendly Error on the page using any of the following error information returned by PayPal 
    //TODO - There can be more than 1 error, so check for "error(1).errorId", then "error(2).errorId", and so on until you find no more errors. 
    $ErrorCode = urldecode($resArray["error(0).errorId"]); 
    $ErrorMsg = urldecode($resArray["error(0).message"]); 
    $ErrorDomain = urldecode($resArray["error(0).domain"]); 
    $ErrorSeverity = urldecode($resArray["error(0).severity"]); 
    $ErrorCategory = urldecode($resArray["error(0).category"]); 

    echo "Preapproval API call failed. "; 
    echo "Detailed Error Message: " . $ErrorMsg; 
    echo "Error Code: " . $ErrorCode; 
    echo "Error Severity: " . $ErrorSeverity; 
    echo "Error Domain: " . $ErrorDomain; 
    echo "Error Category: " . $ErrorCategory; 
} 

?> 

原题:

我来自PayPal的一些脚本,可以让用户实现从我的网站付款。

在第一步中,当他们通过发送基本的支付脚本支付,我得到这些值回:

Array ( 
[responseEnvelope.timestamp] => 2011-04-08T01:34:03.578-07:00 
[responseEnvelope.ack] => Success 
[responseEnvelope.correlationId] => a2de97aaf57f0 
[responseEnvelope.build] => 1822511 
[payKey] => AP-8AW04791DK417062F 
[paymentExecStatus] => CREATED) 

当付款由贝宝证实,使用他们的IPN系统,我得到这些值回:

test_ipn = 1 
payment_type = instant 
payment_date = 01:11:38 Apr 08, 2011 PDT 
payment_status = Completed 
address_status = confirmed 
payer_status = verified 
first_name = John 
last_name = Smith 
payer_email = [email protected] 
payer_id = TESTBUYERID01 
address_name = John Smith 
address_country = United States 
address_country_code = US 
address_zip = 95131 
address_state = CA 
address_city = San Jose 
address_street = 123, any street 
business = [email protected] 
receiver_email = [email protected] 
receiver_id = TESTSELLERID1 
residence_country = US 
item_name = something 
item_number = AK-1234 
quantity = 1 
shipping = 3.04 
tax = 2.02 
mc_currency = USD 
mc_fee = 0.44 
mc_gross = 12.34 
mc_gross_1 = 9.34 
txn_type = web_accept 
txn_id = 3848811 
notify_version = 2.1 
custom = xyz123 
charset = windows-1252 
verify_sign = AWPjjtnKgiQkL5dH.EojlIO6uUy9AijwJCRexi2IglsAajCxoIkbVEq- 

我看不出这让我建立连接的任何值,让我更新了正确的数据库记录说,付款已成功完成。

+0

在这个调用中,Paypal返回“内部服务器错误,请检查服务器日志中的详细信息”错误。我没有得到什么问题。我检查了服务器日志,但是我没有发现任何关于这个错误的信息。对我有何建议? – gautamlakum 2014-01-18 11:14:29

回答

2

txn_id = 3848811是贝宝的交易ID。如果您希望paypal发回系统中某个标识符的引用(您的付款标识符),您可以使用您在请求中发送的“自定义”字段。

如果你使用NVP,它会是PAYMENTREQUEST_n_CUSTOM,不知道SOAP接口。

+0

我不明白,在paypal基本支付模块脚本中,我如何捕获txn_id?如果我可以捕获它,那么我可以看到如何使用从ipn返回的txn_id来更新正确的数据库记录。 – oshirowanen 2011-04-08 08:59:19

+0

您重定向客户,对吗?交易ID仅在客户完成支付时生成,这意味着您只能在返回的请求(意思是成功URL)或IPN中捕获交易ID。因此,您应该发送一个自定义字段,以确定实际付款的购物车。 – jishi 2011-04-08 12:29:58

+0

@ jishi,请参阅原始问题中的更新1。 – oshirowanen 2011-04-08 13:40:42