如何检索刚刚执行的事务的信息?

时间:2015-01-20 12:24:37

标签: php paypal omnipay

这是我的代码:

$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上修改此代码用于信用卡?

2 个答案:

答案 0 :(得分:0)

根据您的评论,我认为您没有进入成功的付款阶段。

考虑到这一点,让我们看看快速结账流程并将其与DoDirectPayment api电话进行比较

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

  1. SetExpressCheckout API Call - 购物车宣布结账详情并返回“快速结账令牌”。令牌标识了商店从PayPal

  2. 请求的结账会话
  3. 将买方重定向到快速结帐网址,并将该标记附加到重定向网址 - https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-6C677292NP7377708

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

    1. 买家登录并批准付款

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

    3. 5.集成启动GetExpressCheckoutDetails API调用,检索送货信息并向买方显示最后一个概述和增加的运费。

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

        对于通过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}
        

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

        根据您在代码中的评论判断,您假设在第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/

答案 1 :(得分:0)

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