更新2:
我目前的代码如下:
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听众)
如果上面第二个链接中的框为空,只需点击“重新开始”,然后点击下一步,直到进入第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系统从paypal确认付款时,我会收到这些值:
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 = buyer@paypalsandbox.com
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 = seller@paypalsandbox.com
receiver_email = seller@paypalsandbox.com
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 :(得分:2)
txn_id = 3848811是来自paypal的交易ID。如果您希望paypal发回系统中某些标识符的引用(您的付款标识符),您可以使用“自定义”字段,您将在请求中发送该字段。
如果使用NVP,则为PAYMENTREQUEST_n_CUSTOM,不了解SOAP接口。