Joh*_*hnP 8 php paypal paypal-adaptive-payments
我正在尝试使用Paypal的自适应支付API,并且很难将其转换为生产.一切都按预期在沙盒模式下工作,我得到了正确的响应,但是当我切换到我的实时APP ID时它不起作用.
这些是我用于沙箱的配置值
PayPal URL : https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay?paykey=[TOKEN_HERE]
Application ID : APP-80W284485P519543T
Run Code Online (Sandbox Code Playgroud)
这些值在沙盒模式下适用于我.但是当我切换到下面的生产值时,它就会停止工作
PayPal URL : https://www.paypal.com/webapps/adaptivepayment/flow/pay?paykey=[TOKEN_HERE]
Application ID : [ACTUAL APP ID]
This is what I mean by stops working.
Run Code Online (Sandbox Code Playgroud)
This transaction has already been approved. Please visit your PayPal Account Overview to see the details
Run Code Online (Sandbox Code Playgroud)
最终的最终网址 - https://ic.paypal.com/webapps/adaptivepayment/flow/payinit?execution=e6s1
截图 - http://screencast.com/t/28qJZ9CIk
那里还有一个"返回"按钮,当我点击它时,我每次都会被带到另一个站点(看起来我被发送到随机的failUrls)
我已经包含了我在下面使用的代码
$payRequest = new PayRequest();
$payRequest->actionType = "PAY";
$payRequest->cancelUrl = $cancelURL; //my success and fail urls
$payRequest->returnUrl = $returnURL;
$payRequest->clientDetails = new ClientDetailsType();
$payRequest->clientDetails->applicationId = $this->config['application_id'];
$payRequest->clientDetails->deviceId = $this->config['device_id'];
$payRequest->clientDetails->ipAddress = $this->CI->input->ip_address();
$payRequest->currencyCode = $currencyCode;
$payRequest->requestEnvelope = new RequestEnvelope();
$payRequest->requestEnvelope->errorLanguage = "en_US";
//I set the receiver and the amounts. I also define that these are digital goods payments
$receiver1 = new receiver();
$receiver1->email = $opts['receiver_email'];
$receiver1->amount = $opts['amount'];
$receiver1->paymentType = 'DIGITALGOODS';
$payRequest->receiverList = new ReceiverList();
$payRequest->receiverList = array($receiver1);
//Then I make the call
$ap = new AdaptivePayments();
$response = $ap->Pay($payRequest);
if(strtoupper($ap->isSuccess) == 'FAILURE') {
log_message('error', "PAYMENT_FAIL : " . print_r($ap->getLastError(), true));
return false;
} else {
if($response->paymentExecStatus == "COMPLETED") {
header("Location: " . $this->config['success_url']);
exit;
} else {
$token = $response->payKey;
$payPalURL = $this->config['paypal_redirect_url'] . 'paykey='.$token;
header("Location: ".$payPalURL);
exit;
}
}
Run Code Online (Sandbox Code Playgroud)
这是从他们的示例实现中获取的代码,因此不确定这里出了什么问题.其他可能相关的信息
我正在使用自适应付款以确保发件人和收件人实际完成了交易
我将付款方式设置为"DIGITAL GOODS"
编辑
我已经附上了附带付款密钥的示例网址
https://www.paypal.com/webapps/adaptivepayment/flow/pay?paykey=AP-0H388650F08226841
Run Code Online (Sandbox Code Playgroud)
我发现了让我如此悲伤的问题。
Paypal SDK 使用几个常量,这些常量定义在/sdk/lib/Config/paypal_sdk_clientproperties
这些常量包含用户名、密码、application_id、API url 和其他一些内容。这些直接在文件中使用/sdk/lib/CallerServices,php。因此,与您在 API 中所期望的相反,这些值不会在设置阶段注入,因此如果您没有注意到该文件并更改这些值,则上述代码将不起作用。
要解决此问题,只需更新文件中定义的值即可。