支付宝集成——如何在回调地址中使用自定义参数
2015-06-15 14:32
405 查看
支付宝集成——如何在回调地址中使用自定义参数
来源 http://www.solagirl.net/use-custom-para-in-alipay-return-url.html2012 年 8 月 15 日 By Sola
支付宝集成时,有同步返回地址return_url和异步通知地址notify_url,这两个地址中的参数与签名验证有非常大的关系,在支付宝的说明中,强调return_url不可以有自定义参数,否则会导致sign和mysign不相等,但有时我们需要一些自定义参数来做判断,怎么办呢?
搜索:
11条留言
支付宝集成时,有同步返回地址return_url和异步通知地址notify_url,这两个地址中的参数与签名验证有非常大的关系,在支付宝的说明中,强调return_url不可以有自定义参数,否则会导致sign和mysign不相等,但有时我们需要一些自定义参数来做判断,怎么办呢?
签名验证机制
支付宝签名有两次,第一次是发送的时候,第二次是返回的时候,返回又分为同步返回和异步通知,这两个的签名方式是相同的。向支付宝发送参数时,调用如下函数产生签名,并构建生成表单的数组
支付宝的签名是根据程序构建的参数进行的,发送时参数由本地程序构建,所以受自己控制,只要参数正确,基本可以成功,去除空参数等操作是支付宝的库函数来完成的。
接收回传的参数时,对于同步返回的参数,$_GET数组的内容非常重要,因为验证回传参数时(调用verfyReturn()函数),首先将$_GET的内容全部传给getMysign()方法,支付宝会get给我们一个sign,只有根据回传参数产生出相同的sign,才可以验证通过。这就是我们不能使用自定义参数的原因,如果增加了自定义参数,getMysign()就会带有杂质,跟支付宝生成的sign过程不同了,自然结果就要不对。
如何让自定义参数跟支付宝兼容
这个自定义参数问题只存在于return_url中,因为同步回传使用GET方式,异步通知使用POST方式,POST不受url中的自定义参数影响。假设你的自定义参数是custom_val
在调用支付宝的验证参数前,将这个自定义参数从$_GET数组中去掉,支付宝验证结束后再恢复就可以了。
为什么notify_url地址不能带有自定义参数
在指定notify_url时,合法的方式如http://www.solagirl.net/notify_url.php
不合法的方式如
http://www.solagirl.net/notify_url.php?order_id=10
与其说第二种格式不合法,不如说它是无效的。为什么这样说?因为不论你在这个地址后面带上多少自定义的参数,支付宝通过异步方式向你POST数据时,都会把?后面的参数去掉,所以带了也是白带,起不了任何作用,更不可能影响签名判断。这点似乎不如paypal方便,要区分执行过程只能靠POST过来的数据。
因此支付宝的notify_url不是不可以带有自定义参数,而是带了也没用,自作多情而已。
相关文章推荐
- Oracle索引(B*tree与Bitmap)的学习总结
- jQuery方法区别:click() bind() live() delegate()区别
- Linux下使用Sigar 获取磁盘信息
- JS——事件
- Lua与C——执行Lua脚本(二)
- Android调用系统截图时候出现黑框
- NSString特性分析学习
- 爬虫技术和爬虫需求现状和展望
- CSS3 transition 属性 过渡效果
- GRE填空词汇——显性类+隐性类
- 压缩感知(Compressive Sensing)一
- js 放置位置
- 怎样学习框架
- iOS开发 纯代码适配技巧 baseViewController
- 在Java中Highcharts前后台数据交互传输
- Android5.1--APK包的安装、卸载和优化(PackageManagerService)(二)
- Android xml布局中的include
- 在NGUI中高效优化UIScrollView之UIWrapContent的简介以及使用
- MYSQL之表分区----按日期分区
- 网址请求服务器的具体过程