PHP-PHP测试接口(及时到账),return_url总是返回失败

发布于 2016-11-01 23:53:36 字数 1345 浏览 1284 评论 2

公司要做支付宝充值,今天测试,出现一个很大的问题,
钱都打过去了,
但return_url 返回的老是验证失败(notify_url 返回的是正确的)
查看了下后是sing和mysign不一致,找了好久都不知道问题出在哪了?
下面是return_url的日志
请求各位大哥帮帮忙,急啊。
执行日期:20130222185521
responseTxt=true
notify_url_log:sign=03bdf6fa7b3161226c201158486d9282&mysign=6238b62e3aa6efdee6b050d7bc8506e2,body=支付游戏充值&buyer_email=helloadmins@163.com&buyer_id=2088702718984963&exterface=create_direct_pay_by_user&is_success=T&notify_id=RqPnCoPT3K9%2Fvwbh3I73%2FoccJ2UNMeTP8b3v2DKX%2FogBWtiBWOp7d9CyAAfhi1RBeiQr&notify_time=2013-02-22 18:55:11&notify_type=trade_status_sync&out_trade_no=ZFB20130222065449&payment_type=1&seller_email=13365511711@qq.com&seller_id=2088801385523753&subject=支付游戏充值&total_fee=0.01&trade_no=2013022227603396&trade_status=TRADE_SUCCESS&sign=03bdf6fa7b3161226c201158486d9282&sign_type=MD5&_URL_=Array

我用的是thinkphp做的,下面是测试的其它配置

//页面跳转同步通知页面路径,要用 http://格式的完整路径,不允许加?id=123这类自定义参数
//return_url的域名不能写成http://localhost/create_direct_pay_by_user_php_utf8/return_url.php ,否则会导致return_url执行无效
$aliapy_config['return_url'] = 'http://.......com/index.php/Pay/return_url';

//服务器异步通知页面路径,要用 http://格式的完整路径,不允许加?id=123这类自定义参数
$aliapy_config['notify_url'] = 'http://.......com/index.php/Pay/notify_url';

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虐人心 2017-09-10 16:26:48

首先不知道你用的支付宝接口是哪个版本的 我的在接收返回值并校验的时候 是这样的:

  $partner = Conf::get('epay_ali_pid');
$key = Conf::get('epay_ali_key');
require_once(ROOT_PATH."/app/alipay/class/alipay_notify.php");
require_once(ROOT_PATH."/app/alipay/alipay_config.php");
$_GET['app'] ="";
$_GET['act'] ="";
//构造通知函数信息
$alipay = new alipay_notify($partner,$key,$sign_type,$_input_charset,$transport);
//计算得出通知验证结果
$verify_result = $alipay->return_verify();
//print_r($verify_result);exit;
if($verify_result) {//验证成功
....
}else{
//验证失败
}

然后我对比了一下 发现你new alipay_notify();的时候 传参数的时候传的是一个变量 不知道你这个变量是什么类型的 而查看函数alipy_notify()的时候 里面参数是这样的:

 /**构造函数
*从配置文件中初始化变量
*$partner 合作身份者ID
*$key 安全校验码
*$sign_type 签名类型
*$_input_charset 字符编码格式
*$transport 访问模式
*/
function alipay_notify($partner,$key,$sign_type,$_input_charset = "GBK",$transport= "https") {

$this->transport = $transport;
if($this->transport == "https") {
$this->gateway = "https://www.alipay.com/cooperate/gateway.do?";
}else {
$this->gateway = "http://notify.alipay.com/trade/notify_query.do?";
}
$this->partner = $partner;
$this->_key = $key;
$this->mysign = "";
$this->sign_type = $sign_type;
$this->_input_charset = $_input_charset;
}

可以看出这个函数参数 是多个的 不能只用一个变量(你的是$aliapy_config) 请检查下,问题应该出在这。

泛泛之交 2016-11-20 22:17:26

不久之前也做过支付宝接口的调试,遇到过类似问题。
我用的是kohana框架。

支付宝要求通知页面不允许添加自定义参数,但是你的框架可能对地址添加了参数,导致执行无效。

请在return_url中打印下返回的数组中查看是否含有此类参数。

然后在支付宝给的接口中lib/alipay_core.function.php的paraFilter方法中过滤此参数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文