【问题标题】:How to retrieve information about a transaction just performed?如何检索有关刚刚执行的交易的信息?
【发布时间】:2015-03-18 16:22:09
【问题描述】:

这是我的代码:

$gateway = GatewayFactory::create('PayPal_Express');
    $gateway->setUsername('name');
    $gateway->setPassword('pass');
    $gateway->setSignature('sig');
    $gateway->setTestMode(true);

    $resp = $gateway->purchase(
            array(
                'cancelUrl' => 'mysite/',
                'returnUrl' => 'mysite/success',
                'description' => "mysite item",
                'amount' => $amount, //final amount
                'currency' => 'EUR'
                )
            )->send();

    if ($resp->isSuccessful()) {
        // payment was successful: update database
        // never reached
        $a = new database('database');
        $a->write database;
        $dbp = null; die;
        print_r($resp);
    } elseif ($resp->isRedirect()) {
        // redirect to offsite payment gateway
        $resp->redirect();
    } else {
        echo $resp->getMessage();
        header('Location: mysite/error');
        exit;
    }

如何在重定向后检索有关交易的信息?
如何在 paypal 上修改此代码以用于信用卡?

【问题讨论】:

    标签: php paypal omnipay


    【解决方案1】:

    根据您的 cmets,我假设您没有进入成功付款阶段。

    考虑到这一点,让我们看一下快速结帐流程并将其与 DoDirectPayment api 调用进行比较

    ================

    1. SetExpressCheckout API 调用 - 购物车宣布结帐详情并取回“快速结帐令牌”。该令牌标识商店已向 PayPal 请求的结帐会话

    2. 买家被重定向到 Express Checkout URL,并且令牌被附加到重定向 URL - https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-6C677292NP7377708

    (如果跳过第 5 步,则必须在重定向 URL 中添加 useraction=commit 参数)

    1. 买家登录并批准付款

    2. 买家被重定向回 SetExpressCheckout API 调用中宣布的返回 URL,PayerID 和令牌作为 HTTP GET 参数添加到返回 URL

    5. 集成启动 GetExpressCheckoutDetails API 调用,检索运输信息并向买家显示最后一个概览和添加的运输费用

    1. 一旦买家决定完成付款,他就会通过您在您网站上的集成启动付款。然后网站调用 DoExpressCheckoutPayment API

    ================

    对于通过 DoDirectPayment API 进行的信用卡付款,API NVP 请求和响应如下所示 - 应该非常简单。

    Request:  
    VERSION = 109.0  
    METHOD = DoDirectPayment  
    PAYMENTACTION = Sale  
    IPADDRESS = 192.168.0.1  
    AMT = 0.01  
    CREDITCARDTYPE = Visa  
    ACCT = xxxxxxxx6840  
    EXPDATE = 102020  
    CVV2 = 123  
    FIRSTNAME = John  
    LASTNAME = Test  
    STREET = 12312 Port Grace Blvd  
    CITY = La Vista  
    STATE = NE  
    COUNTRYCODE = US  
    ZIP = 68128      
    CURRENCYCODE = USD  
    
    Response:
    TIMESTAMP=2015-01-20T16:00:27Z  
    CORRELATIONID=180513f33ad52  
    ACK=Success  
    VERSION=109.0  
    BUILD=14726230  
    AMT=0.01  
    CURRENCYCODE=USD  
    AVSCODE=X  
    CVV2MATCH=M  
    TRANSACTIONID=0PA61839GE498951M}
    

    ================

    根据代码中的 cmets 判断,您假设事务在第 4 步完成后完成。

    由于我没有看到任何启动 DoExpressCheckoutPayment API 调用的代码,因此您需要确保至少已完成第 6 步。

    https://devtools-paypal.com/integrationwizard/ 有独立的示例代码,可能会有所帮助。 但是,使用基于 SDK 的集成将减轻很多痛苦:

    https://devtools-paypal.com/guide/expresscheckout/php?interactive=ON&env=sandbox

    ...

    如果您想在稍后阶段检索付款详细信息,您可以针对在 DoDirectPayment API 调用或 DoExpressCheckoutPayment 调用中返回的交易 ID 运行 GetTransactionDetails API 调用。

    见:https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/GetTransactionDetails_API_Operation_NVP/

    【讨论】:

    【解决方案2】:

    您可以使用即时付款通知来接收有关刚刚完成的交易的通知。 IPN 是推荐的方式。

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      相关资源
      最近更新 更多