支付宝pc即时支付兼容app移动支付异步回调函数验证

2 篇文章 0 订阅
1、即时支付原文件 alipay_notify.class.php
/**
* 获取返回时的签名验证结果
* @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会被支付宝认为是参数而不是路由,所以它访问的时候是不带r=xxx,而是放在post参数里面

所以要解决这种问题需要自己重写路由规则

一般yii的路由是index.php/xxx/这种格式


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值