alipay_notify.class.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /* *
  3. * 类名:AlipayNotify
  4. * 功能:支付宝通知处理类
  5. * 详细:处理支付宝各接口通知返回
  6. * 版本:1.0
  7. * 日期:2016-06-06
  8. * 说明:
  9. * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
  10. * 该代码仅供学习和研究支付宝接口使用,只是提供一个参考
  11. *************************注意*************************
  12. * 调试通知返回时,可查看或改写log日志的写入TXT里的数据,来检查通知返回是否正常
  13. */
  14. require_once("alipay_core.function.php");
  15. require_once("alipay_rsa.function.php");
  16. class AlipayNotify {
  17. /**
  18. * HTTPS形式消息验证地址
  19. */
  20. var $https_verify_url = 'https://mapi.alipay.com/gateway.do?service=notify_verify&';
  21. /**
  22. * HTTP形式消息验证地址
  23. */
  24. var $http_verify_url = 'http://notify.alipay.com/trade/notify_query.do?';
  25. var $alipay_config;
  26. function __construct($alipay_config){
  27. $this->alipay_config = $alipay_config;
  28. }
  29. function AlipayNotify($alipay_config) {
  30. $this->__construct($alipay_config);
  31. }
  32. /**
  33. * 获取返回时的签名验证结果
  34. * @param $para_temp 通知返回来的参数数组
  35. * @param $sign 返回的签名结果
  36. * @return 签名验证结果
  37. */
  38. function getSignVeryfy($para_temp, $sign) {
  39. //除去待签名参数数组中的空值和签名参数
  40. $para_filter = paraFilter($para_temp);
  41. //对待签名参数数组排序
  42. $para_sort = argSort($para_filter);
  43. //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  44. $prestr = createLinkstring($para_sort);
  45. $isSgin = false;
  46. switch (strtoupper(trim($this->alipay_config['sign_type']))) {
  47. case "RSA" :
  48. $isSgin = rsaVerify($prestr, trim($this->alipay_config['alipay_public_key']), $sign);
  49. break;
  50. default :
  51. $isSgin = false;
  52. }
  53. return $isSgin;
  54. }
  55. /**
  56. * 获取远程服务器ATN结果,验证返回URL
  57. * @param $notify_id 通知校验ID
  58. * @return 服务器ATN结果
  59. * 验证结果集:
  60. * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空
  61. * true 返回正确信息
  62. * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟
  63. */
  64. function getResponse($notify_id) {
  65. $transport = strtolower(trim($this->alipay_config['transport']));
  66. $partner = trim($this->alipay_config['partner']);
  67. $veryfy_url = '';
  68. if($transport == 'https') {
  69. $veryfy_url = $this->https_verify_url;
  70. }
  71. else {
  72. $veryfy_url = $this->http_verify_url;
  73. }
  74. $veryfy_url = $veryfy_url."partner=" . $partner . "&notify_id=" . $notify_id;
  75. $responseTxt = getHttpResponseGET($veryfy_url, $this->alipay_config['cacert']);
  76. return $responseTxt;
  77. }
  78. }
  79. ?>