快乐十分技巧出号规律: 微信退款回调

山西快乐十分走势 www.yfhdr.cn 微信退款一定要写回调函数?。?!一定要写回调函数?。?!一定要写回调函数?。?!

昨天,小编线上的版本微信退款失败了,失败了,由于没写回调函数,我当时还是一脸蒙蔽,还确信退款成功了,结果打开微信商户平台发现,还真没退成功,而且查不到任何信息,不说了,小编这个月要吃土了T_T.

有时候微信退款,会有延时,比如银行卡支付的,会有1-3个工作日,所以,有些业务逻辑要在回调里写。

下面撸退款代码……

首先是申请退款的代码

 1    $app = app('wechat.payment');
 2     $total_money = $order_pay->pay_money * 100;
 3     $refund_money = $order_pay->pay_money * 100;
 4     $result = $app->refund->byOutTradeNumber(
 5     $order_pay->pay_order_id,
 6     $order_pay->transaction,
 7     $total_money,
 8     $refund_money,
 9     [
10        'refund_desc' => $reason,
11        'notify_url' => config('wechat.payment.default.refund_url'),
12        'out_refund_no' => $order_pay->out_refund_no
13     ]
14     );
15     if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
16       Log::info('退款申请请求成功');
17     }

注意,这里只是申请退款成功,并不是退款成功,因为微信那边也有可能失败的。

上面设置了notify_url这个回调地址。微信会把退款结果发送到这个地址,然后你需要写一些你的业务逻辑。

注意:

  在申请退款接口中上传参数“notify_url”以开通该功能

  如果链接无法访问,商户将无法接收到微信通知。 

  通知url必须为直接可访问的url,不能携带参数。示例:notify_url:“https://pay.weixin.qq.com/wxpay/pay.action”

  如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效。

 

然后接下来就是写回调函数,处理退款成功/失败的相关逻辑

微信通知的相关参数

哈哈,是不是没有看到你想要的参数,比如订单号,没关系,微信都返回给你了,只是做了加密处理,都在加密信息req_info这个字段里。

所以在做业务逻辑处理之前,我们先需要对这个req_info做解密处理。

解密步骤如下: 

(1)对加密串A做base64解码,得到加密串B

(2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )

(3)用key*对加密串B做AES-256-ECB解密(PKCS7Padding)

看到解密步骤是不是有种吃屎的感觉(故意用了个屎黄色的底色,嘎嘎),很难受。emmmm。。。?;故侵苯游易约盒?baidu copy)的解密代码吧。不然我怕你顺着网线过来打我

 1  public function req_info_decrypt($str, $key = null)
 2     {
 3         $key = $key ? : md5(config('wechat.payment.default.key'));
 4         $str = base64_decode($str);
 5         $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);
 6         $block = mcrypt_get_block_size('rijndael_128', 'ecb');
 7         $pad = ord($str[($len = strlen($str)) - 1]);
 8         $len = strlen($str);
 9         $pad = ord($str[$len - 1]);
10         $xml = substr($str, 0, strlen($str) - $pad);
11         libxml_disable_entity_loader(true);
12         return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
13     }

解密出来的参数:

未截全)具体参考微信官方文档。

有了这个自定的解密函数之后就可以愉快的在自己的回调函数里玩耍啦。

回调函数:

 1 public function refundSuccess()
 2     {
 3         $app = app('wechat.payment');
 4         $response = $app->handleRefundedNotify(function ($message, $fail) {
 5             if($message['appid'] != config('wechat.payment.default.app_id')){
 6                 //不是商户本身的请求,直接略过
 7                 return true;
 8             }
 9             $data = $this->req_info_decrypt($message['req_info']);
10             Log::info($data);
11             $order_pay = OrderPay::where('out_trade_no', $data['out_trade_no'])
14 ->first(); 15 if($order_pay){
18 Log::info('微信退款成功 pay_id:'.$order_pay->pay_id);
30 return true; 31 } 32 Log::info('Order not exists.'); 33 $fail('Order not exists.'); 34 }); 35 return $response; 36 }

好了,差不多就是这样,上面我把我自己处理的逻辑都给删掉了。差不多就是改一些订单的状态,发通知啊这类。

 

本文属于个人原创,欢迎转载,转载请附链接://www.yfhdr.cn/x-x-j/p/9305291.html

posted @ 2018-07-13 15:35 寞小陌 阅读(...) 评论(...) 编辑 收藏
  • 溃疡恶变也会腹痛 这些肿瘤最容易被误诊 2018-09-04
  • 候选企业:光大证券股份有限公司 2018-09-04
  • 25年全球健康三大变化 2018-07-26
  • 林肯中心室内乐协会再掀浪潮 完整录音入驻中国 亚洲巡演整装待发 室内乐 厂牌 2018-07-25
  • 社会主义是过渡阶段,最终实现共产主义才是其目的。社会主义是在消灭私有制,建立公有制直至无私,实现共产主义。 2018-07-25
  • 呼死你团伙被摧毁 封停83万余个账号抓获210余人 2018-07-25
  • 回复@老老保老张工:伪高工不仅智力低下,知识也很匮乏也!连啥叫计划经济都没搞懂! 2018-07-24
  • 中国经济充当了世界经济发展的火车头。但是,作为世界经济火车头的中国,在世界主要经济体股市都走牛的情况下,为何熊途漫漫?这种不正常的现象,背后是我们资本市场的投融 2018-07-24
  • 社评:中国打的是对美贸易自卫反击战 2018-07-24
  • 世界献血者日 近距离接触一袋合格血的成长历程 2018-07-23
  • 便道汛期被淹学生上学遇阻 来凤老伯坚持背娃过河40年 2018-07-23
  • 以朝鲜民主主义人民共和国为例,难道特金会是由朝鲜工人、农民主导的?[哈哈] 2018-07-23
  • 设计众议院:神奇的MQB让全新一代宝来重生 2018-07-22
  • 回复@不能这样啊:那你不是可以啥事不做天天甩起手耍?你自己不求上进还不准别人有所追求么? 2018-07-22
  • 三位基层书记的一周:思想不转换 其他都白扯 2018-07-22
  • 339| 58| 576| 557| 840| 177| 331| 225| 846| 199|