我對paypal api非常陌生,我遵循this教程,並根據我的需要調整了代碼。交易標識無效10609
我想提出一個基本的授權&捕獲的3個步驟,但我一直在捕捉
- 顧客土地paypal_pay_redirect.php用於登錄到貝寶失敗,並作出paymet
- 的付款罰款和我們土地paypal_success.php,在這裏我請求授權,並保留TRANSACTIONID爲下一步
- paypal_capture.php我使用transactionid捕獲支付,但我總是得到「10609:交易編號無效」
這裏的代碼,哪裏出錯?
感謝
paypal_lib.php
<?php
// code from http://coding.smashingmagazine.com/2011/09/05/getting-started-with-the-paypal-api/
class Paypal {
/**
* Last error message(s)
* @var array
*/
protected $_errors = array();
/**
* API Credentials
* Use the correct credentials for the environment in use (Live/Sandbox)
* @var array
*/
protected $_credentials = array(
'USER' => 'xxxxxxxxxxxxxxxxxxxx',
'PWD' => 'xxxxxxxxxxxxx',
'SIGNATURE' => 'xxxxxxxxxxxxxxxxxxxxxxxxx'
);
/**
* API endpoint
* Live - https://api-3t.paypal.com/nvp
* Sandbox - https://api-3t.sandbox.paypal.com/nvp
* @var string
*/
protected $_endPoint = 'https://api-3t.sandbox.paypal.com/nvp';
/**
* API Version
* @var string
*/
protected $_version = '74.0';
/**
* Make API request
*
* @param string $method string API method to request
* @param array $params Additional request parameters
* @return array/boolean Response array/boolean false on failure
*/
public function request($method,$params = array()) {
$this -> _errors = array();
if(empty($method)) { //Check if API method is not empty
$this -> _errors = array('API method is missing');
return false;
}
//Our request parameters
$requestParams = array_merge(
array(
'METHOD' => $method,
'VERSION' => $this -> _version
),
$this -> _credentials
);
//Building our NVP string
$request = http_build_query(array_merge($requestParams, $params));
//cURL settings
$curlOptions = array (
CURLOPT_URL => $this -> _endPoint,
CURLOPT_VERBOSE => 1,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $request
);
$ch = curl_init();
curl_setopt_array($ch,$curlOptions);
//Sending our request - $response will hold the API response
$response = curl_exec($ch);
//Checking for cURL errors
if (curl_errno($ch)) {
$this -> _errors = curl_error($ch);
curl_close($ch);
return false;
//Handle errors
} else {
curl_close($ch);
$responseArray = array();
parse_str($response,$responseArray); // Break the NVP string to an array
return $responseArray;
}
}
}
?>
paypal_pay_redirect.php
<?php
require("paypal_lib.php");
//Our request parameters
$requestParams = array(
'RETURNURL' => 'https://www.domain.com/paypal_success.php',
'CANCELURL' => 'https://www.domain.com/paypal_fail.php'
);
$orderParams = array(
'PAYMENTREQUEST_0_AMT' => "57.00",
'PAYMENTREQUEST_0_SHIPPINGAMT' => '0',
'PAYMENTREQUEST_0_CURRENCYCODE' => 'EUR',
'PAYMENTREQUEST_0_ITEMAMT' => "57.00"
);
$item = array(
'L_PAYMENTREQUEST_0_NAME0' => 'xxxxxxxxxx',
'L_PAYMENTREQUEST_0_DESC0' => 'xxxxxxxxxx',
'L_PAYMENTREQUEST_0_AMT0' => "57.00",
'L_PAYMENTREQUEST_0_QTY0' => '1'
);
$paypal = new Paypal();
$response = $paypal -> request('SetExpressCheckout',$requestParams + $orderParams + $item);
if(is_array($response) && $response['ACK'] == 'Success') { //Request successful
$token = $response['TOKEN'];
header('Location: https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=' . urlencode($token));
}
?>
paypal_success.php
<?php
require("paypal_lib.php");
if(isset($_GET['token']) && !empty($_GET['token'])) { // Token parameter exists
// Get checkout details, including buyer information.
// We can save it for future reference or cross-check with the data we have
$paypal = new Paypal();
$checkoutDetails = $paypal -> request('GetExpressCheckoutDetails', array('TOKEN' => $_GET['token']));
// Complete the checkout transaction
$requestParams = array(
'TOKEN' => $_GET['token'],
'PAYMENTACTION' => 'Authorization',
'PAYERID' => $_GET['PayerID'],
'PAYMENTREQUEST_0_AMT' => '57', // Same amount as in the original request
'PAYMENTREQUEST_0_CURRENCYCODE' => 'EUR' // Same currency as the original request
);
$response = $paypal -> request('DoExpressCheckoutPayment',$requestParams);
if(is_array($response) && $response['ACK'] == 'Success') { // Payment successful
// We'll fetch the transaction ID for internal bookkeeping
$transactionId = $response['PAYMENTINFO_0_TRANSACTIONID'];
echo "OK id: ".$transactionId;
var_dump($response);
}
var_dump($checkoutDetails);
}
?>
paypal_capture.php
兩<?php
require("paypal_lib.php");
$paypal = new Paypal();
// Complete the checkout transaction
$requestParams = array(
'AMT' => '57.00',
'AUTHORIZATIONID' => 'xxxxxxxxxxxxxxxxxxx', //what I get in paypal_success.php
'CURRENCYCODE' => 'EUR',
'COMPLETETYPE' => 'Complete', // Same amount as in the original request
);
$response = $paypal -> request('DoCapture',$requestParams);
var_dump($response);
?>