当前位置: 首页 > 知识库问答 >
问题:

omnipay贝宝快递不回邮地址

锺离穆冉
2023-03-14

我在这里使用omnipay设置:https://github.com/adrianmacneil/omnipay处理paypal express结账。

这个过程运行良好,用户被重定向到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);

响应消息或原始数据中没有任何内容包含客户地址。

在我苦苦挣扎的时候,有没有人能做到这一点?这是完成交易的最后一步。

共有3个答案

许黎明
2023-03-14

如果$response未返回-

Omnipay不支持这种开箱即用的方式,因此您可能需要复制和自定义一个现有请求,以便在确认付款后进行单独的API调用。

许奇
2023-03-14

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();

这不是最好的。但它是有效的。:)

胡翔
2023-03-14

对于那些试图得到这份工作的人来说,正如阿德里安所说。

您首先进行正常的omnipay paypal支付,然后:

  1. 拿到给你的令牌
  2. 使用调用getExpresscheckout细节方法预形成对贝宝的第二次调用
  3. 这将返回您需要的所有信息

API信息在这里:https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content

paypal提供的php脚本可以为您完成所有任务:

https://cms.paypal.com/cms_content/ES/es_ES/files/developer/nvp_ECGetExpressCheckout_php.txt

 类似资料:
  • 我正在尝试使用本指南实现mobile express结账 我首先从我的Web服务器进行php调用以使用所需的参数调用setExpressCheckout,并取回一个有效的令牌,然后使用call将其编辑到贝宝上 https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_mobile-快速结账 这会重定向到PayPal,但sandbox告诉我

  • 我想在中集成Omnipay paypal。我经历过,但我不明白该怎么做。我没找到任何文件。我经历过这个,这个,这个。我已经使用Composer安装了它。现在我对以下问题感到困惑。 > 这里会给谁的凭据?正在购买的人或将把钱转给的人。我在哪种情况下会给别人的证书? 用户将如何进行交易?我看过它的purchase和purchasecomplete函数,但不能理解它。在正常的Paypal集成中,我们通常

  • 我试图通过一个自定义运费贝宝快递结账。 我用的是omnipay和laravel 4。 我收集这是可能的贝宝快递文档中引用,但不能让它与omniPay工作我尝试了以下: 在XXX是航运,运Amt,shipping_amount,我已经尝试添加航运价值到购物车中的每个项目。我尝试过修改类来手动添加运输值,就像这样:

  • PayPal。NET SDK 1.7.2(https://www.nuget.org/packages/PayPal/)支持快速结帐?我似乎在示例代码中找不到它。 如果没有,它是否提供了另一种在电子商务网站上进行支付的机制? 或者我应该使用PayPalMerchant SDK。NET 2.16.117(https://www.nuget.org/packages/PayPalMerchantSDK

  • 贝宝快递结账API文档规定,“买家的交易总成本”(PAYMENTREQUEST_n_AMT)不能超过10,000美元。看到这里... https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP 我希望为一个奢侈品电子商务网站实施快速结账,其中许多项目超过10,000美元。 是

  • 我正在尝试使用PayPal支付REST API集成PayPal Express结账。我希望我们的客户允许他们的用户使用PayPal Express Checkout付款。 我在他们的网站上没有看到任何留档解释如何使用他们的用户API用户名、密码和签名集成快速结账,而是使用Oauth凭据客户端ID/令牌。 我必须使用自适应支付方式吗? https://devtools-paypal.com/guid