使用“实时”商家帐户进行沙盒测试有效,但使用沙盒商家帐户失败

Posted

技术标签:

【中文标题】使用“实时”商家帐户进行沙盒测试有效,但使用沙盒商家帐户失败【英文标题】:Sandbox Testing with 'Live' Merchant account Works but using Sandbox Merchant Account Fails 【发布时间】:2017-05-18 06:48:50 【问题描述】:

一些背景: 我正在尝试让 Paypal Standard 与付费会员 Pro WordPress 插件一起使用。那里没有得到太多帮助,这就是我在这里的原因。

订单设置为“审查”并保持这种状态,即使打开了调试,也没有通过电子邮件发送的 ipn 调试日志。还尝试设置调试以便它会创建一个调试日志文件,但它不会创建一个。 Paypal IPN 详细信息是:

原件/重发:原件

最后交货日期/时间:---

通知网址:http://example.com/wp-admin/admin-ajax.php?action=ipnhandler

HTTP 响应代码:

投放状态:已禁用

重试次数:0

IPN 类型:交易完成

IPN 消息本身看起来不错。

做过以下测试:

1 - 打开调试后,我访问 IPN URL 并得到以下信息: 登录时间:2017 年 1 月 2 日 13:20:34 阵列 () FP!数组([标题] => 加上一整页的信息,我通过电子邮件收到了 ipn 调试日志。

2 - 我设置了一个 html 表单,并将操作设置为 ipn 处理程序 url 并获得验证

3 - 使用具有相同 ipn 处理程序 url 的 IPN 模拟器,交易类型设置为 Web 接受,付款状态设置为已完成,其他一切都是默认设置,除了我删除了自定义字段。 IPN 日志显示已验证。

4 - 在沙盒中测试 - 我为买家使用了沙盒买家帐户之一,并错误地将我的开发者电子邮件地址用作商家(它确实是一个商业 Paypal 帐户),但我得到了验证!结帐已处理 - 成功。

5 - 除了使用沙盒商户帐户外,我重复了该测试,但这次得到的结果与实时系统相同 - 订单状态为“review”,没有 ipn 调试日志等。

6 - 再次重复沙盒测试并使用客户的商家帐户电子邮件地址,我得到了验证!下单成功。

我尝试过的其他事情: - 在我的客户商家帐户中将语言编码从 Windows 更改为 UTF-8 - 没有区别 - 安装了 TLS 1.2 兼容性测试插件:“启用 TLS 1.2。 在调用需要 TLS 1.2 的网关和 API 时,您的站点应该可以正常工作。端点是https://tlstest.paypal.com/ (PayPal) PayPal_Connection_OK;检测到 PHP 版本 5.5.38 cURL 版本 7.34.0 或更高版本。

这是处理程序的代码:

function pmpro_ipnValidate() 
//read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

//generate string to check with PayPal
foreach ( $_POST as $key => $value ) 
    $value = urlencode( stripslashes( $value ) );
    $req .= "&$key=$value";


//post back to PayPal system to validate
$gateway_environment = pmpro_getOption( "gateway_environment" );
if ( $gateway_environment == "sandbox" ) 
    $paypal_url = 'https://www.' . $gateway_environment . '.paypal.com/cgi-bin/webscr';
 else 
    $paypal_url = 'https://www.paypal.com/cgi-bin/webscr';


$paypal_params = array(
    "body"        => $req,
    "httpversion" => "1.1",
    "Host"        => "www.paypal.com",
    "Connection"  => "Close",
    "user-agent"  => PMPRO_USER_AGENT
);

$fp = wp_remote_post( $paypal_url, $paypal_params );

//log post vars
ipnlog( print_r( $_POST, true ) );

//assume invalid
$r = false;

if ( empty( $fp ) ) 
    //HTTP ERROR
    ipnlog( "HTTP ERROR" );

    $r = false;
 elseif ( ! empty( $fp->errors ) ) 
    //error from PayPal
    ipnlog( "ERROR" );
    ipnlog( "Error Info: " . print_r( $fp->errors, true ) . "\n" );

    //log fb object
    ipnlog( print_r( $fp, true ) );

    $r = false;
 else 
    ipnlog( "FP!" );

    //log fb object
    ipnlog( print_r( $fp, true ) );

    $res = wp_remote_retrieve_body( $fp );
    ipnlog( print_r( $res, true ) );

    if ( strcmp( $res, "VERIFIED" ) == 0 ) 
        //all good so far
        ipnlog( "VERIFIED" );
        $r = true;
     else 
        //log for manual investigation
        ipnlog( "INAVLID" );
        $r = false;
    


/**
 * Filter if an ipn request is valid or not.
 *
 * @since 1.8.6.3
 *
 * @param bool $r true or false if the request is valid
 * @param mixed $fp remote post object from request to PayPal
 */
$r = apply_filters( 'pmpro_ipn_validate', $r, $fp );

return $r;

我还能做些什么来找出为什么我无法使用客户的 Paypal 帐户在实时网站上成功获得 Paypal Standard 付款,但它在沙盒中有效?

【问题讨论】:

【参考方案1】:

原来我需要启用 IPN 并在 Paypal 帐户中设置一个 IPN URL,这违反了 PMPRO 的说明。

【讨论】:

以上是关于使用“实时”商家帐户进行沙盒测试有效,但使用沙盒商家帐户失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PayPal 中验证沙盒商家帐户?

如何验证 iOS 沙盒帐户是不是仍然有效?

使用沙盒测试帐户在应用程序中进行测试的问题

为沙盒帐户创建立即购买按钮

通过新的贝宝沙盒帐户进行测试

iOS PayPal 沙盒模式下的负错误测试