我在这里使用omnipay设置:https://github.com/adrianmacneil/omnipay来处理paypal快速结账。
该过程正常,用户被重定向到paypal - >他们登录并选择付款 - >他们会返回我的网站,此时我会收到付款。
我遇到的问题是我需要将他们输入Paypal的地址作为他们的账单/送货地址。
要将用户发送到PayPal,我有以下内容:
$gateway = GatewayFactory::create('PayPal_Express');
$gateway->setUsername('XX-USERNAME_XX');
$gateway->setPassword('XX_PASSWORDXX');
$gateway->setSignature('XX_SIG_XX');
$gateway->setTestMode(true);
$response = $gateway->purchase(
array(
'cancelUrl'=>'http://www.XXX.co.uk/',
'returnUrl'=>'http://www.XXX.co.uk/paypalexpress_confirm',
'amount' => $totalamount,
'currency' => 'GBP'
)
)->send();
$response->redirect();
当用户返回时,我有以下内容:
$gateway = GatewayFactory::create('PayPal_Express');
$gateway->setUsername('XX-USERNAME_XX');
$gateway->setPassword('XX_PASSWORDXX');
$gateway->setSignature('XX_SIG_XX');
$gateway->setTestMode(true);
$response = $gateway->completePurchase(
array(
'cancelUrl'=>'http://www.XXX.co.uk/',
'returnUrl'=>'http://www.XXX.co.uk/paypalexpress_confirm',
'amount' => $totalamount,
'currency' => 'GBP'
)
)->send();
echo $responsemsg=$response->getMessage();
echo '<br><br><br>';
$data = $response->getData();
print_r($data);
响应消息或原始数据中没有任何内容包含客户地址。
有没有人因为我的努力而努力工作,这是完成交易的最后一步。
答案 0 :(得分:3)
对于那些试图完成这项工作的人来说,就像阿德里安所说的那样。
您首先进行正常的omnipay paypal付款,然后再进行:
PHP脚本paypal提供为您完成所有操作:
https://cms.paypal.com/cms_content/ES/es_ES/files/developer/nvp_ECGetExpressCheckout_php.txt
答案 1 :(得分:1)
omnipay\paypal\ProGateway.php
添加新功能
public function fetchExpressCheckoutDetail(array $parameters = array())
{
return $this->createRequest('\Omnipay\PayPal\Message\FetchExpressCheckoutRequest', $parameters);
}
omnipay\paypal\src\Message
添加新文件FetchExpressCheckoutRequest.php
namespace Omnipay\PayPal\Message;
class FetchExpressCheckoutRequest extends AbstractRequest
{
public function getData()
{
$data = $this->getBaseData('GetExpressCheckoutDetails');
$this->validate('transactionReference');
$data['TOKEN'] = $this->getTransactionReference();
$url = $this->getEndpoint()."?USER={$data['USER']}&PWD={$data['PWD']}&SIGNATURE={$data['SIGNATURE']}&METHOD=GetExpressCheckoutDetails&VERSION={$data['VERSION']}&TOKEN={$data['TOKEN']}";
parse_str (file_get_contents( $url ),$output);
$data = array_merge($data,$output);
return $data;
}
}
用法:
$response = $gateway->completePurchase($params)->send();
$data = $response->getData();
$gateway->fetchExpressCheckoutDetail(array('transactionReference'=>$data['TOKEN']))->getData();
这不是最好的。但它的确有效。 :)
答案 2 :(得分:0)
如果$response->getData()
方法未返回,则可能需要调用PayPal的GetExpressCheckoutDetails
API方法来获取有关交易的额外详细信息。
Omnipay不支持开箱即用,因此您可能需要复制并自定义一个现有请求,以便在确认付款后进行单独的API调用。