Omnipay / Paypal Gateway - 交易显示为成功,而 Paypal Sandbox 帐户不显示交易的债务/信用

Posted

技术标签:

【中文标题】Omnipay / Paypal Gateway - 交易显示为成功,而 Paypal Sandbox 帐户不显示交易的债务/信用【英文标题】:Omnipay / Paypal Gateway - Transaction shows as success whereas Paypal Sandbox account do not show debt/credit of the transaction 【发布时间】:2014-04-02 22:55:40 【问题描述】:

1) 我正在尝试让 Omnipay / Paypal 正常工作。我的问题是我得到“ACK = Success”,但是当进入沙盒测试账户时,买家和卖家都没有将交易显示为已预订。

2) 我也感觉到并非所有 API 都正确传输到 Paypal(例如 Brandname 使用 Angell 库正确显示,但使用 Omnipay 它不使用变量。

谁能帮助解决这两个问题。? - 请参阅下面的代码。我在这里查看了其他文章,它们并没有解决我的问题。

<?php
//
// Input Variables
//


// Config
$domain = "http://localhost";
$directory = "http://localhost/omnipay/";
$returnURL = $directory."success.php";      
$cancelURL = $directory."cancel.php";   
$landingpage = "Billing";                                               

$brandname = "TEST COMPANY";;   
$customerservicenumber  = "";

// Purchase Data
$invoiceNumber = "0000200202023939";        
$currencyCode = "USD";

// PRODUCT DATA 

$subscriptionName = "XXX";                          
$subscriptionDesc = "ZZZ";  
$subscriptionAmt = "5.00";                      



require 'vendor/autoload.php';

use Omnipay\Omnipay;


$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('XXX');
$gateway->setPassword('XXX');
$gateway->setSignature('XXX');
$gateway->setTestMode(true);

$response = $gateway->purchase(
    array(
        // Settings
        'brandname' =>  '',
            'customerservicenumber'=> '',           
    'cancelURL' =>  $cancelURL,
    'returnURL' =>  $returnURL,
            'reqconfirmshipping' => '0',
            'noshipping' => '1',                            

    'allownote' =>  '0',    

    // Buyer data
    'email' =>  $email,                         
    'description'=> $subscriptionDesc,
    'amount'=>  $subscriptionAmt,
    'currency'=>    $currencyCode,
     )  
)->send();

$response->redirect();

?>

success.php 是同一个脚本,除了结尾

....

)->send();
$data = $response->getData();

//echo '<pre>'; print_r($data);

if($data['ACK'] == "Success")
echo "ACK = Success!!!!!!";

?>

如前所述,我最后总是得到 ACK = Success,但金额并未从 Sandbox 用户帐户中扣除。所以出了点问题。有什么想法吗?

【问题讨论】:

您得到 ACK=Success 用于哪个 API 调用?查看响应的 METHOD 和 PAYMENTSTATUS。响应(如果确实是 DoExpressCheckoutPayment)还应包含 transactionID。 【参考方案1】:

您似乎没有完成购买。你的 success.php 应该是这样的:

$response = $gateway->completePurchase($params)->send();

在您重定向到 Paypal 之前,将您的交易参数保存在会话变量中,然后在 Paypal 返回时使用它们完成购买。查看示例代码了解更多详情:https://github.com/omnipay/example/blob/master/index.php#L181

【讨论】:

以上是关于Omnipay / Paypal Gateway - 交易显示为成功,而 Paypal Sandbox 帐户不显示交易的债务/信用的主要内容,如果未能解决你的问题,请参考以下文章

通过 OmniPay PHP 进行 PayPal 汇款

在 OmniPay 中获取 PayPal 休息错误

Omnipay - Laravel - 完成 Paypal Pyment

Omnipay 贝宝与 laravel 4 的集成

我如何使用omnipay检查它是不是是待处理的付款

Omnipay:将钱从 PayPal 账户转移到 Stripe 账户