支付宝pc即时支付兼容app移动支付异步回调函数验证
2016-02-22 17:27
393 查看
1、即时支付原文件 alipay_notify.class.php
2、修改过后
/**
* 获取返回时的签名验证结果
* @param $para_temp 通知返回来的参数数组
* @param $sign 返回的签名结果
* @return 签名验证结果
*/
function getSignVeryfy($para_temp, $sign) {
//除去待签名参数数组中的空值和签名参数
$para_filter = paraFilter($para_temp);
//对待签名参数数组排序
$para_sort = argSort($para_filter);
//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
$prestr = createLinkstring($para_sort);
$isSgin = false;
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
case "RSA" :
$isSgin = rsaVerify($prestr, $sign);
break;
default :
$isSgin = false;
}
return $isSgin;
}
3、在alipay_md5.function.php中增加rsa签名验证
我是用yii2.0把支付宝嵌入的
yii2.0的异步回调地址要注意
一般yii的路由是index.php?r=xxx
这种格式r=xxx会被支付宝认为是参数而不是路由,所以它访问的时候是不带[b]r=xxx,而是放在post参数里面[/b]
所以要解决这种问题需要自己重写路由规则
一般yii的路由是[b]index.php/xxx/这种格式[/b]
/** * 获取返回时的签名验证结果 * @param $para_temp 通知返回来的参数数组 * @param $sign 返回的签名结果 * @return 签名验证结果 */ function getSignVeryfy($para_temp, $sign) { //除去待签名参数数组中的空值和签名参数 $para_filter = paraFilter($para_temp); //对待签名参数数组排序 $para_sort = argSort($para_filter); //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 $prestr = createLinkstring($para_sort); $isSgin = false; switch (strtoupper(trim($this->alipay_config['sign_type']))) { case "MD5" : $isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']); break; default : $isSgin = false; } return $isSgin; }
2、修改过后
/**
* 获取返回时的签名验证结果
* @param $para_temp 通知返回来的参数数组
* @param $sign 返回的签名结果
* @return 签名验证结果
*/
function getSignVeryfy($para_temp, $sign) {
//除去待签名参数数组中的空值和签名参数
$para_filter = paraFilter($para_temp);
//对待签名参数数组排序
$para_sort = argSort($para_filter);
//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
$prestr = createLinkstring($para_sort);
$isSgin = false;
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
case "RSA" :
$isSgin = rsaVerify($prestr, $sign);
break;
default :
$isSgin = false;
}
return $isSgin;
}
3、在alipay_md5.function.php中增加rsa签名验证
/** * rsa验证签名 * @param $prestr 需要签名的字符串 * @param $sign 签名结果 * return 签名结果 */ function rsaVerify($prestr, $sign) { $sign = str_replace(' ','+',$sign); $sign = base64_decode($sign); $public_key = file_get_contents(\Yii::getAlias('@vendorUser').'/alipay/alipay_public_key.pem'); $pkeyid = openssl_get_publickey($public_key); if ($pkeyid) { $verify = openssl_verify($prestr, $sign, $pkeyid); openssl_free_key($pkeyid); } if ($verify == 1) { return true; } else { return false; } }
我是用yii2.0把支付宝嵌入的
yii2.0的异步回调地址要注意
一般yii的路由是index.php?r=xxx
这种格式r=xxx会被支付宝认为是参数而不是路由,所以它访问的时候是不带[b]r=xxx,而是放在post参数里面[/b]
所以要解决这种问题需要自己重写路由规则
一般yii的路由是[b]index.php/xxx/这种格式[/b]
相关文章推荐
- 二维码扫描ios开发
- Android 编程下的自定义 xmlns
- Object
- Android照相和录音功能的使用
- Android获取图片资源的4种方式
- iOS--代码片段
- Apple Pay教程(附示例代码)(1)
- android M上可能需要开发者注意的权限大全
- android 常用library
- android graphic(9)—开发者选项关闭HW overlays
- iOS 怎样创建不带storyboard的工程(或只带xib的工程)
- 3D Touch
- Android Service完全解析,关于服务你所需知道的一切(下)
- Android应用开发经常使用知识
- Android之进程通讯——广播
- Android 6.0 开发者对系统权限的使用与练习(Permissions Best Practices)
- nagios 日常维护
- Cocos2dx-lua 播放音循环播放问题
- Salient Object Detection via Structured Matrix Decomposition
- android跨进程启动service