当前位置:   article > 正文

微信支付接口--支付成功的回调--超详细Demo_epay获取支付成功回调的appid

epay获取支付成功回调的appid

如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人。谢谢大家!❤

如果解决不了,可以在文末进群交流。

写微信支付成功回调的代码,尤其要注意官方文档的一句话:

如果不注意这里,支付成功后微信会一直对这个地址进行调用,更新订单的对数据库进行操作,也会一直存在更新:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7.

这其实不是坑的主要所在,问题是这个文档,我真的不知道该如何吐槽。一次偶然的意外才看到。这个文档说明。


好了,其他的没有什么需要特别注意的,直接上代码:

  1. <?php
  2. //获取接口数据,如果$_REQUEST拿不到数据,则使用file_get_contents函数获取
  3. $post = $_REQUEST;
  4. if ($post == null) {
  5. $post = file_get_contents("php://input");
  6. }
  7. if ($post == null) {
  8. $post = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
  9. }
  10. if (empty($post) || $post == null || $post == '') {
  11. //阻止微信接口反复回调接口 文档地址 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7,下面这句非常重要!!!
  12. $str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
  13. echo $str;
  14. exit('Notify 非法回调');
  15. }
  16. /*****************微信回调返回数据样例*******************
  17. $post = '<xml>
  18. <return_code><![CDATA[SUCCESS]]></return_code>
  19. <return_msg><![CDATA[OK]]></return_msg>
  20. <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
  21. <mch_id><![CDATA[10000100]]></mch_id>
  22. <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
  23. <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
  24. <result_code><![CDATA[SUCCESS]]></result_code>
  25. <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
  26. <trade_type><![CDATA[APP]]></trade_type>
  27. </xml>';
  28. *************************微信回调返回*****************/
  29. libxml_disable_entity_loader(true); //禁止引用外部xml实体
  30. $xml = simplexml_load_string($post, 'SimpleXMLElement', LIBXML_NOCDATA);//XML转数组
  31. $post_data = (array)$xml;
  32. /** 解析出来的数组
  33. *Array
  34. * (
  35. * [appid] => wx1c870c0145984d30
  36. * [bank_type] => CFT
  37. * [cash_fee] => 100
  38. * [fee_type] => CNY
  39. * [is_subscribe] => N
  40. * [mch_id] => 1297210301
  41. * [nonce_str] => gkq1x5fxejqo5lz5eua50gg4c4la18vy
  42. * [openid] => olSGW5BBvfep9UhlU40VFIQlcvZ0
  43. * [out_trade_no] => fangchan_588796
  44. * [result_code] => SUCCESS
  45. * [return_code] => SUCCESS
  46. * [sign] => F6890323B0A6A3765510D152D9420EAC
  47. * [time_end] => 20180626170839
  48. * [total_fee] => 100
  49. * [trade_type] => JSAPI
  50. * [transaction_id] => 4200000134201806265483331660
  51. * )
  52. **/
  53. //订单号
  54. $out_trade_no = isset($post_data['out_trade_no']) && !empty($post_data['out_trade_no']) ? $post_data['out_trade_no'] : 0;
  55. //查询订单信息
  56. $order_info = DB::fetch_first("SELECT * FROM order WHERE order_no = '" .$out_trade_no."'");
  57. if(count($order_info) > 0){
  58. //查询平台信息
  59. $platform_info = DB::fetch_first("SELECT * FROM pingtaiInfo WHERE `open_pid`= {$order_info['part1']}");
  60. //平台支付key
  61. $wxpay_key = $platform_info['zhifu_key'];
  62. //接收到的签名
  63. $post_sign = $post_data['sign'];
  64. unset($post_data['sign']);
  65. //重新生成签名
  66. $newSign = MakeSign($post_data,$wxpay_key);
  67. //签名统一,则更新数据库
  68. if($post_sign == $newSign){
  69. $updateData = array();
  70. $updateData['pay_time'] = TIMESTAMP; //支付时间
  71. $updateData['order_status'] = 2; //订单状态
  72. //更新order数据库
  73. //Do what you want...
  74. }
  75. }
  76. //阻止微信接口反复回调接口 文档地址 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7,下面这句非常重要!!!
  77. $str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
  78. echo $str;
  79. function MakeSign($params,$key){
  80. //签名步骤一:按字典序排序数组参数
  81. ksort($params);
  82. $string = ToUrlParams($params); //参数进行拼接key=value&k=v
  83. //签名步骤二:在string后加入KEY
  84. $string = $string . "&key=".$key;
  85. //签名步骤三:MD5加密
  86. $string = md5($string);
  87. //签名步骤四:所有字符转为大写
  88. $result = strtoupper($string);
  89. return $result;
  90. }
  91. function ToUrlParams( $params ){
  92. $string = '';
  93. if( !empty($params) ){
  94. $array = array();
  95. foreach( $params as $key => $value ){
  96. $array[] = $key.'='.$value;
  97. }
  98. $string = implode("&",$array);
  99. }
  100. return $string;
  101. }

 

废话不多说了,直接上代码,不懂地方可留言,或者进微信群内交流。群二维码如果过期,请加我微信:mengyilingjian.

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/184024
推荐阅读
相关标签
  

闽ICP备14008679号