2016支付宝--APP支付宝集成与后台

By | 2016 年 5 月 12 日

1、为了安全,支付宝建议签名在服务端进行。

    实际上,支付宝签名需要将要签名的数据,转换为&号连接的URL字符串。标准SDK中,转换函数如下:
    

/**
 * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
 * @param $para 需要拼接的数组
 * return 拼接完成以后的字符串
 */
function createLinkstring($para) {
	$arg  = "";
	while (list ($key, $val) = each ($para)) {
		$arg.=$key.'='.$val.'&';
	}
	//去掉最后一个&字符
	$arg = substr($arg,0,count($arg)-2);
	
	//如果存在转义字符,那么去掉转义
	if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
	
	return $arg;
}

纯粹用此函数转换后,结果例如

out_trade_no=r1239123129&partner=223424123239&payment_type=1

而真正的

out_trade_no="r1239123129"&partner="223424123239"&payment_type="1"

因此需要增加一个转换函数

/**
 * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,带有引号,用于生成启动签名
 * @param $para 需要拼接的数组
 * return 拼接完成以后的字符串
 */
function createLinkstring_fix($para) {
	$arg  = "";
	while (list ($key, $val) = each ($para)) {
		$arg.=$key.'="'.$val.'"&';
	}
	//去掉最后一个&字符
	$arg = substr($arg,0,count($arg)-2);
	
	//如果存在转义字符,那么去掉转义
	if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
	
	return $arg;
}

这样可以正常签名了。

2、然则,签名字符串,还需要进行urlencode处理,否则你懂的。

3、最后将所有数据,包含URLencod处置的sign,组合在一起,用上面生成带引号的方法处置好。传递给APP。

剩下的就不需要说了。

4、其中有个很奇葩的东西就是&notify_url=这块,显示成了¬ify_url=  这个请忽略。。无关大碍。

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据