使用“实时”商家帐户进行沙盒测试有效,但使用沙盒商家帐户失败
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 的说明。
【讨论】:
以上是关于使用“实时”商家帐户进行沙盒测试有效,但使用沙盒商家帐户失败的主要内容,如果未能解决你的问题,请参考以下文章