wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改。本文分享wemall app商城源码Android之处理支付宝各接口通知返回,供技术员参考学习。以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码,该代码仅供学习和研究支付宝接口使用,只是提供一个参考,调试通知返回时,可查看或改写log日志的写入TXT里的数据,来检查通知返回是否正常。

wemall官网地址:http://www.wemallshop.com

<?php
require_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 . "&notify_id=" . $notify_id;$responseTxt = getHttpResponseGET($veryfy_url, $this->alipay_config['cacert']);return $responseTxt;}
}
?>

wemall官网地址:http://www.wemallshop.com
原文详情地址:http://Git.oschina.NET/zzunet...
wemall doraemonAndroid app商城详情地址:http://www.koahub.com/home/pr...
WeMall - 开源微商城 微信商城 商城源码 分销商城 b2b2c商城系统

wemall app商城源码Android之支付宝通知处理类相关推荐

  1. wemall app商城源码Android之支付宝通知处理类 1

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之处 ...

  2. wemall app商城源码Android之支付宝接口公用函数

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之 ...

  3. wemall app商城源码Android之支付宝接口RSA函数

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享支付宝接口RSA函数,RSA签名.验签.解密等 ...

  4. wemall app商城源码中基于JAVA的Android异步加载图片管理器代码

    wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...

  5. 小程序/app 商城 源码 发布(包括后台)

    小程序/app 商城 源码 发布(包括后台)无任何隐瞒 前端使用uniapp,后端使用thinkphp,开发简单好用的商城,可以生成为app,网站,公众号,小程序等, 这是一个直接可以商用的商城项目. ...

  6. 最新仿网易优选APP商城源码+Vue开发全家桶

    正文: 最新仿网易优选APP商城源码+Vue开发全家桶,源码采用Vue全家桶+mintUI+axios技术栈开发,只写了前端,后端采用网易商场抓包接口,也可以二次修改成自己的接口. 安装方法: 1.将 ...

  7. 多用户商城管理源码 商城源码 多用户小程序 APP商城源码

    多用户商城管理源码  商城源码  多用户小程序  APP商城源码 开发环境:Java +springboot + vue 前端:UNIAPP 系统功能简介: 系统管理 字典管理 角色管理 菜单管理 用 ...

  8. 云豹app直播源码Android 端获取相册图片功能的具体实现教程

    app直播源码开发时,关于动态功能的实现,通常采用类似于朋友圈式图文+视频模式,这就需要通过访问手机相册获取用户图片进行下一步操作,接下来就请跟随小编一起,从app直播源码角度探究云豹直播系统在这个功 ...

  9. java版Spring Cloud+Mybatis 微服务商城 b2b2c商城 直播商城 小程序商城 多商家入驻商城 APP商城源码 聚合支付商城

    1. 平台简介 一个全新覆盖全行业,以直播.短视频带货,商家实体VR全景体验,多营销模式,分销分佣,多商家入驻,多端支持的大型新零售电商平台. 2. 平台清单 系统管理平台 + 商家端(PC+手机) ...

最新文章

  1. PMP-【第5章 项目范围管理】-2021-1-27(116页-135页)
  2. Springboot整合freemarker和相应的语法
  3. 杭电1044java实现dfs bfs
  4. 【杭州(含嘉兴,绍兴,金华,湖州,义乌)】Uber优步司机奖励政策(2月1日~2月7日)...
  5. Linux系统编程——线程(1)
  6. java如何实现Socket的长连接和短连接
  7. (HDU)1019 --Least Common Multiple(最小公倍数)
  8. c语言 算术平均滤波法_单片机数字滤波的算法
  9. 追加docker已运行容器添加或修改端口映射方法
  10. linux 自动补全快捷键,day4 Linux下的快捷键和基本命令
  11. 智慧交通不能用WiFi,还能算是智慧出行吗?
  12. 解决苹果手机连接了wifi,依旧无法更新系统的问题
  13. courant数_CFD中常用的参数介绍 | 坐倚北风
  14. vue+openlayer实现选房平面图
  15. leetcode 825. Friends Of Appropriate Ages
  16. 最新各大CMS采集资源站解析网址合集
  17. jaeger 是很么软件_jaeger 使用初探
  18. Java编程之学生成绩
  19. 微信公众号开发:渠道二维码生成/粉丝来源归属统计打标签
  20. Foxit pdf阅读器不及时释放文件的bug解决

热门文章

  1. Spring 注解解释
  2. 基于bootstrap_登陆页面
  3. Day24-Ajax文件上传
  4. string int 相互转换
  5. daily scrum 11.27
  6. GARFIELD@09-11-2004
  7. Spring Boot 第一个小程序之又来Hello World了
  8. Oracle数据库导入csv文件(sqlldr命令行)
  9. Java零基础入门 :(1) windows7 配置Java环境变量
  10. INF=0x3f3f3f3f背后的知识