支付宝移动支付,服务端对异步通知信息验签的时候验签失败,支付宝pc端支付接入PHP实现
2016-03-16 00:00
796 查看
支付宝异步通知数据形式如下,
对数组按KEY首字母排序
按官方文档做法,排除掉
执行下面代码验签!
但是验签总是失败
--------------------------更新 2016-03-15-----------------------------------------
已解决,文档中说,验签用的是
转载:https://segmentfault.com/q/1010000004607880
参考:
https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103927&docType=1 https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.F1IOBD&treeId=58&articleId=103596&docType=1
支付宝pc端支付接入PHP实现
http://www.cnblogs.com/jiqing9006/p/5846207.html
$arr=array ( 'discount' => '0.00', 'payment_type' => '1', 'subject' => '测试02', 'trade_no' => '2016031.............2958619', 'buyer_email' => '18776152065', 'gmt_create' => '2016-03-14 17:04:52', 'notify_type' => 'trade_status_sync', 'quantity' => '1', 'out_trade_no' => '16031238100064254059', 'seller_id' => '2099122451677261', 'notify_time' => '2016-03-14 17:04:53', 'body' => '测试02', 'trade_status' => 'TRADE_SUCCESS', 'is_total_fee_adjust' => 'N', 'total_fee' => '0.01', 'gmt_payment' => '2016-03-14 17:04:52', 'seller_email' => 'xxx@126.com', 'price' => '0.01', 'buyer_id' => '2065912804441725', 'notify_id' => '2cf4b6638.............c176e3f3lk2', 'use_coupon' => 'N', 'sign_type' => 'RSA', 'sign' => 'Q3uCDyyCs/nODpHaUeCb1HqGINlQ3AxOr40MUN.............Br40MU=', )
对数组按KEY首字母排序
ksort($arr);
按官方文档做法,排除掉
sign_type,
sign然后拼成下面形式的待签名支付串
$SemiFinishedSign
body=Hello&buyer_email=13788888888&buyer_id=2088002007013600 ................................................................................. trade_no=2014040311001004361525&trade_status=TRADE_FINISHED&use_coupon=N
执行下面代码验签!
$pukey=file_get_contents('alipay_public_key.pem'); $publickey=openssl_pkey_get_public($pukey); $verify=(bool)openssl_verify($SemiFinishedSign, base64_decode($arr['sign']), $publickey); echo $verify?'验签成功':'验签失败';
用于支付的公私钥都没有问题,对任意字符,openssl_sign();openssl_verify();都能通过
但是验签总是失败
--------------------------更新 2016-03-15-----------------------------------------
已解决,文档中说,验签用的是
支付宝公钥,并不是RSA公钥,申请接口的人没有给我支付宝公钥,我一直以为用RSA公钥,我用错了,上传公钥,然后复制支付宝公钥下来用于验证签名。
转载:https://segmentfault.com/q/1010000004607880
参考:
https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103927&docType=1 https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.F1IOBD&treeId=58&articleId=103596&docType=1
支付宝pc端支付接入PHP实现
http://www.cnblogs.com/jiqing9006/p/5846207.html
相关文章推荐
- PHP数据类型转换
- FTPClient与commons-pool2
- php 长整型转字符串 (convert long to string)
- PHP中区分null和false的方法
- ThinkPhP 导出 excel
- OLAP、OLTP的介绍和比较
- ThinkPHP实现支付宝接口功能实例
- php中的join函数
- PHP结合Ajax实现登录验证的Demo
- PHP实现一个日历
- 正则表达式在PHP里的应用
- phpmyadmin使用空密码登入配置方法
- vsftpd: not configured for standalone, must be started from inetd
- 安卓第十四天笔记-内容提供者(ContentProvider)
- php利用svn hooks将程序自动发布到测试环境
- PHP高效率写法(详解原因)
- PHP 二维数组赋值
- PHP导出数据为excel表格
- OutputDebugString方便格式化WIN32封装
- PhpStorm +xdebug 调试安装配置注意事项