赞
踩
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人。谢谢大家!❤
如果解决不了,可以在文末进群交流。
写微信支付成功回调的代码,尤其要注意官方文档的一句话:
如果不注意这里,支付成功后微信会一直对这个地址进行调用,更新订单的对数据库进行操作,也会一直存在更新:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7.
这其实不是坑的主要所在,问题是这个文档,我真的不知道该如何吐槽。一次偶然的意外才看到。这个文档说明。
好了,其他的没有什么需要特别注意的,直接上代码:
- <?php
- //获取接口数据,如果$_REQUEST拿不到数据,则使用file_get_contents函数获取
- $post = $_REQUEST;
- if ($post == null) {
- $post = file_get_contents("php://input");
- }
-
- if ($post == null) {
- $post = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
- }
-
- if (empty($post) || $post == null || $post == '') {
- //阻止微信接口反复回调接口 文档地址 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7,下面这句非常重要!!!
- $str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
- echo $str;
- exit('Notify 非法回调');
- }
-
- /*****************微信回调返回数据样例*******************
- $post = '<xml>
- <return_code><![CDATA[SUCCESS]]></return_code>
- <return_msg><![CDATA[OK]]></return_msg>
- <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
- <mch_id><![CDATA[10000100]]></mch_id>
- <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
- <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
- <result_code><![CDATA[SUCCESS]]></result_code>
- <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
- <trade_type><![CDATA[APP]]></trade_type>
- </xml>';
- *************************微信回调返回*****************/
-
- libxml_disable_entity_loader(true); //禁止引用外部xml实体
-
- $xml = simplexml_load_string($post, 'SimpleXMLElement', LIBXML_NOCDATA);//XML转数组
-
- $post_data = (array)$xml;
-
- /** 解析出来的数组
- *Array
- * (
- * [appid] => wx1c870c0145984d30
- * [bank_type] => CFT
- * [cash_fee] => 100
- * [fee_type] => CNY
- * [is_subscribe] => N
- * [mch_id] => 1297210301
- * [nonce_str] => gkq1x5fxejqo5lz5eua50gg4c4la18vy
- * [openid] => olSGW5BBvfep9UhlU40VFIQlcvZ0
- * [out_trade_no] => fangchan_588796
- * [result_code] => SUCCESS
- * [return_code] => SUCCESS
- * [sign] => F6890323B0A6A3765510D152D9420EAC
- * [time_end] => 20180626170839
- * [total_fee] => 100
- * [trade_type] => JSAPI
- * [transaction_id] => 4200000134201806265483331660
- * )
- **/
- //订单号
- $out_trade_no = isset($post_data['out_trade_no']) && !empty($post_data['out_trade_no']) ? $post_data['out_trade_no'] : 0;
-
- //查询订单信息
- $order_info = DB::fetch_first("SELECT * FROM order WHERE order_no = '" .$out_trade_no."'");
-
-
- if(count($order_info) > 0){
- //查询平台信息
- $platform_info = DB::fetch_first("SELECT * FROM pingtaiInfo WHERE `open_pid`= {$order_info['part1']}");
-
- //平台支付key
- $wxpay_key = $platform_info['zhifu_key'];
-
- //接收到的签名
- $post_sign = $post_data['sign'];
- unset($post_data['sign']);
-
- //重新生成签名
- $newSign = MakeSign($post_data,$wxpay_key);
-
- //签名统一,则更新数据库
- if($post_sign == $newSign){
-
- $updateData = array();
- $updateData['pay_time'] = TIMESTAMP; //支付时间
- $updateData['order_status'] = 2; //订单状态
-
- //更新order数据库
- //Do what you want...
- }
- }
-
- //阻止微信接口反复回调接口 文档地址 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7,下面这句非常重要!!!
- $str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
- echo $str;
-
- function MakeSign($params,$key){
- //签名步骤一:按字典序排序数组参数
- ksort($params);
- $string = ToUrlParams($params); //参数进行拼接key=value&k=v
- //签名步骤二:在string后加入KEY
- $string = $string . "&key=".$key;
- //签名步骤三:MD5加密
- $string = md5($string);
- //签名步骤四:所有字符转为大写
- $result = strtoupper($string);
- return $result;
- }
-
- function ToUrlParams( $params ){
- $string = '';
- if( !empty($params) ){
- $array = array();
- foreach( $params as $key => $value ){
- $array[] = $key.'='.$value;
- }
- $string = implode("&",$array);
- }
- return $string;
- }
废话不多说了,直接上代码,不懂地方可留言,或者进微信群内交流。群二维码如果过期,请加我微信:mengyilingjian.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。