微信退款通知接收处理

    public function refundxxx()
    {
        $postStr = file_get_contents("php://input");
        file_put_contents('refund_notify.log', date('Y-m-d H:i:s') . $postStr . PHP_EOL, FILE_APPEND);
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        if ($postObj === false) {
            WxapayService::notifySuccess();
        }
        $postObj = (array)$postObj;
        if ($postObj['return_code'] != 'SUCCESS' || $postObj['return_msg'] != 'OK') {
            WxapayService::notifySuccess();
        }
        $req_info = $postObj['req_info'];
        // 对加密信息进行解密,需要用到商户秘钥
        $appId = $postObj['appid'];
        $mch_id = $postObj['mch_id'];
        $wxappSettings = db('wxapp')->where('app_id', $appId)->where('mch_id', $mch_id)->find();
        if (empty($wxappSettings)) {
            WxapayService::notifySuccess();
        }
        $req_info_xml = openssl_decrypt(base64_decode($req_info), 'aes-256-ecb', md5($wxappSettings['api_key']), OPENSSL_RAW_DATA);
        $req_info_arr = simplexml_load_string($req_info_xml, 'SimpleXMLElement', LIBXML_NOCDATA);
        if ($req_info_arr === false) {
            WxapayService::notifySuccess();
        }
        $req_info_arr = (array)$req_info_arr;

        $out_trade_no = $req_info_arr['out_trade_no'];
        $order = Db::name('vip_charge_log')->where('order_sn', $out_trade_no)->find();
        if (empty($order) || $order['refund_status'] == 1) {
            WxapayService::notifySuccess();
        }
        if ($req_info_arr['refund_status'] == 'SUCCESS') {
            write_log("退款成功,退款返回信息:" . json_encode($req_info_arr) . ",执行操作时间:" . date('Y-m-d H:i:s', time()), 'wxpay_refund_success');
            $res = Db::name('vip_charge_log')->where('id', $order['id'])->update([
                'refund_id' => $req_info_arr['out_refund_no'],
                'refund_status' => 1,
            ]);
        } else {
            ChargeService::refundBalance($order['id']);
        }
        WxapayService::notifySuccess();
    }
    
    public static function notifySuccess()
    {
        echo '<xml>
               <return_code><![CDATA[SUCCESS]]></return_code>
               <return_msg><![CDATA[OK]]></return_msg>
            </xml>';
        exit;
    }

    public static function notifyFail()
    {
        echo '<xml>
			   <return_code><![CDATA[FAIL]]></return_code>
			   <return_msg><![CDATA[FAIL]]></return_msg>
			</xml>';
        exit;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉阳软件yuyangdev_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值