wemall app商城源码Android之支付宝通知处理类
来源:互联网 发布:童谣 知乎 编辑:程序博客网 时间:2024/05/10 03:35
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改。本文分享wemall app商城源码Android之处理支付宝各接口通知返回,供技术员参考学习。
以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码,该代码仅供学习和研究支付宝接口使用,只是提供一个参考,调试通知返回时,可查看或改写log日志的写入TXT里的数据,来检查通知返回是否正常。
wemall官网地址:http://www.wemallshop.com
<?phprequire_once("alipay_core.function.php");require_once("alipay_rsa.function.php");require_once("alipay_md5.function.php");class AlipayNotify { /** * HTTPS形式消息验证地址 */var $https_verify_url = 'https://mapi.alipay.com/gateway.do?service=notify_verify&';/** * HTTP形式消息验证地址 */var $http_verify_url = 'http://notify.alipay.com/trade/notify_query.do?';var $alipay_config;function __construct($alipay_config){$this->alipay_config = $alipay_config;} function AlipayNotify($alipay_config) { $this->__construct($alipay_config); } /** * 针对notify_url验证消息是否是支付宝发出的合法消息 * @return 验证结果 */function verifyNotify(){if(empty($_POST)) {//判断POST来的数组是否为空return false;}else {//对notify_data解密$decrypt_post_para = $_POST;if ($this->alipay_config['sign_type'] == '0001') {$decrypt_post_para['notify_data'] = rsaDecrypt($decrypt_post_para['notify_data'], $this->alipay_config['private_key_path']);}//notify_id从decrypt_post_para中解析出来(也就是说decrypt_post_para中已经包含notify_id的内容)$doc = new DOMDocument();$doc->loadXML($decrypt_post_para['notify_data']);$notify_id = $doc->getElementsByTagName( "notify_id" )->item(0)->nodeValue;//获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息)$responseTxt = 'true';if (! empty($notify_id)) {$responseTxt = $this->getResponse($notify_id);}//生成签名结果$isSign = $this->getSignVeryfy($decrypt_post_para, $_POST["sign"],false);//写日志记录//if ($isSign) {//$isSignStr = 'true';//}//else {//$isSignStr = 'false';//}//$log_text = "responseTxt=".$responseTxt."\n notify_url_log:isSign=".$isSignStr.",";//$log_text = $log_text.createLinkString($_POST);//logResult($log_text);//验证//$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关//isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关if (preg_match("/true$/i",$responseTxt) && $isSign) {return true;} else {return false;}}} /** * 针对return_url验证消息是否是支付宝发出的合法消息 * @return 验证结果 */function verifyReturn(){if(empty($_GET)) {//判断GET来的数组是否为空return false;}else {//生成签名结果$isSign = $this->getSignVeryfy($_GET, $_GET["sign"],true);//写日志记录//if ($isSign) {//$isSignStr = 'true';//}//else {//$isSignStr = 'false';//}//$log_text = "return_url_log:isSign=".$isSignStr.",";//$log_text = $log_text.createLinkString($_GET);//logResult($log_text);//验证//$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关//isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关if ($isSign) {return true;} else {return false;}}}/** * 解密 * @param $input_para 要解密数据 * @return 解密后结果 */function decrypt($prestr) {return rsaDecrypt($prestr, trim($this->alipay_config['private_key_path']));}/** * 异步通知时,对参数做固定排序 * @param $para 排序前的参数组 * @return 排序后的参数组 */function sortNotifyPara($para) {$para_sort['service'] = $para['service'];$para_sort['v'] = $para['v'];$para_sort['sec_id'] = $para['sec_id'];$para_sort['notify_data'] = $para['notify_data'];return $para_sort;} /** * 获取返回时的签名验证结果 * @param $para_temp 通知返回来的参数数组 * @param $sign 返回的签名结果 * @param $isSort 是否对待签名数组排序 * @return 签名验证结果 */function getSignVeryfy($para_temp, $sign, $isSort) {//除去待签名参数数组中的空值和签名参数$para = paraFilter($para_temp);//对待签名参数数组排序if($isSort) {$para = argSort($para);} else {$para = sortNotifyPara($para);}//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串$prestr = createLinkstring($para);$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, trim($this->alipay_config['ali_public_key_path']), $sign);break;case "0001" :$isSgin = rsaVerify($prestr, trim($this->alipay_config['ali_public_key_path']), $sign);break;default :$isSgin = false;}return $isSgin;} /** * 获取远程服务器ATN结果,验证返回URL * @param $notify_id 通知校验ID * @return 服务器ATN结果 * 验证结果集: * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 * true 返回正确信息 * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 */function getResponse($notify_id) {$transport = strtolower(trim($this->alipay_config['transport']));$partner = trim($this->alipay_config['partner']);$veryfy_url = '';if($transport == 'https') {$veryfy_url = $this->https_verify_url;}else {$veryfy_url = $this->http_verify_url;}$veryfy_url = $veryfy_url."partner=" . $partner . "¬ify_id=" . $notify_id;$responseTxt = getHttpResponseGET($veryfy_url, $this->alipay_config['cacert']);return $responseTxt;}}?>
wemall官网地址:http://www.wemallshop.com
原文详情地址:http://Git.oschina.NET/zzunet/wemall-doraemon/commit/e8f303df5663dc69fe47bb9623222149d40e3956
wemall doraemonAndroid app商城详情地址:http://www.koahub.com/home/product/55
WeMall - 开源微商城 微信商城 商城源码 分销商城 b2b2c商城系统
0 0
- wemall app商城源码Android之支付宝通知处理类
- wemall app商城源码Android之支付宝接口公用函数
- wemall app商城源码Android之支付宝接口RSA函数
- wemall app商城源码Android之Native(原生)支付模式一demo
- wemall app商城源码android开发MD5加密工具类
- wemall app微信商城系统Android之通用通知接口demo
- wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)
- wemall app商城源码Android短信监听接收器
- wemall app商城源码Android中ViewHolder详细解释
- wemall app商城源码Android数据的SharedPreferences储存方式
- wemall app商城源码机器人检测
- WeMall的Android app商城中的wemall doraemon代码
- wemall app商城源码中基于JAVA的Android异步加载图片管理器代码
- wemall app商城源码中android按钮的三种响应事件
- wemall app商城源码Android 获取XML网络数据并绑定到ListView
- WeMall商城系统的Android app商城中的wemall-mobile代码
- wemall app商城源码Fragment中监听onKey事件
- wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法
- SpringAOP
- 各大Oj平台介绍
- 对称 非对称加密 RSA MD5 概念
- RecyclerView实现瀑布流,快速滑动,侧滑删除,点击图片放大等效果
- 图像倾斜
- wemall app商城源码Android之支付宝通知处理类
- Android Studio 一起走过的那些坑
- 算法学习-零子数组,最大连续子数组
- 动态的设置cavas的宽高
- Android项目重构之路:实现篇
- 最大连续子序列 hdu1231
- node.js开发错误——TypeError: Cannot set property 'XXX' of undefined
- ural 1149
- HDMI的CEC功能