第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

微信退款回調(diào)

標(biāo)簽:
PHP

微信退款一定要写回调函数!!!一定要写回调函数!!!一定要写回调函数!!!

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

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

下面撸退款代码……

首先是申请退款的代码

$app = app('wechat.payment');    
$total_money = $order_pay->pay_money * 100;    
$refund_money = $order_pay->pay_money * 100;    
$result = $app->refund->byOutTradeNumber(   
     $order_pay->pay_order_id,   
      $order_pay->transaction,    
      $total_money,    
      $refund_money,   
      ['refund_desc' => 
      $reason,       
      'notify_url' => config('wechat.payment.default.refund_url'),       
      'out_refund_no' => $order_pay->out_refund_no    
      ]    
      );    
if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
      Log::info('退款申请请求成功');    
}

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

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

注意:

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

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

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

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

 

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

微信通知的相关参数


https://img1.sycdn.imooc.com//5bad8eb100015f8b09150571.jpg

哈哈,是不是没有看到你想要的参数,比如订单号,没关系,微信都返回给你了,只是做了加密处理,都在加密信息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)的解密代码吧。不然我怕你顺着网线过来打我

public function req_info_decrypt($str, $key = null)

    {

        $key = $key ? : md5(config('wechat.payment.default.key'));

        $str = base64_decode($str);

        $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);

        $block = mcrypt_get_block_size('rijndael_128', 'ecb');

        $pad = ord($str[($len = strlen($str)) - 1]);

        $len = strlen($str);

        $pad = ord($str[$len - 1]);

        $xml = substr($str, 0, strlen($str) - $pad);

        libxml_disable_entity_loader(true);

        return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

    }

解密出来的参数:

https://img1.sycdn.imooc.com//5bad8efb0001c7d505490764.jpg

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

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

回调函数:

public function refundSuccess()

    {

        $app = app('wechat.payment');

        $response = $app->handleRefundedNotify(function ($message, $fail) {

            if($message['appid'] != config('wechat.payment.default.app_id')){

                //不是商户本身的请求,直接略过

                return true;

            }

            $data = $this->req_info_decrypt($message['req_info']);

            Log::info($data);

            $order_pay = OrderPay::where('out_trade_no', $data['out_trade_no'])

                ->first();

            if($order_pay){

                Log::info('微信退款成功 pay_id:'.$order_pay->pay_id);

                return true;

            }

            Log::info('Order not exists.');

            $fail('Order not exists.');

        });

        return $response;

    }

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



點(diǎn)擊查看更多內(nèi)容
4人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消