微信小程序APIv3支付回调解密

namespace app\api\controller;
use think\Db;
class Paysuccessback extends Common{
    public function notify(){
        $receipt = file_get_contents("php://input");
        if ($receipt == null) {
            $receipt = $GLOBALS['HTTP_RAW_POST_DATA'];
        }
        $post_data = json_decode($receipt,true);
        if ($post_data['summary'] == '支付成功') {
            $nonceStr = $post_data['resource']['nonce'];
            $associatedData = $post_data['resource']['associated_data'];
            $ciphertext = $post_data['resource']['ciphertext'];
            $ciphertext = base64_decode($ciphertext);
            if (strlen($ciphertext) <= 12) {
                return;
            }
            $result = $this->wechartDecrypt($ciphertext,$associatedData,$nonceStr);
            $dd = [
                'out_trade_no'=>$result['out_trade_no'],
                'openid'=>$result['payer']['openid'],
                'transaction_id'=>$result['transaction_id'],
                'trade_type'=>$result['trade_type'],
                'trade_state'=>$result['trade_state'],
                'appid'=>$result['appid'],
                'mchid'=>$result['mchid'],
                'payer_total'=>$result['amount']['payer_total'],
                'add_time'=>time()
            ];
            Db::startTrans();
            $pl = Db::table('pay_log')->insert($dd);
            if($result['trade_state'] != 'SUCCESS' && $pl){
                Db::commit();
                return json_encode(['code' => 'SUCCESS', 'message' => '成功']);
            }
            if($result['trade_state'] == 'SUCCESS'){
                //订单号
                $res = db('order')->field('pay_status')->where('order_no',$result['out_trade_no'])->find();
                if($res['pay_status'] == 1){
                    return json_encode(['code' => 'SUCCESS', 'message' => '成功']);
                }
                $user = 自己的业务逻辑
                    try {
                        自己的业务逻辑操作
                        // 提交事务
                        if($pl && $us !== false && $ord !== false && $tilog){
                            Db::commit();
                            return json_encode(['code' => 'SUCCESS', 'message' => '成功']);
                        }
                    } catch (\Exception $e) {
                        // 回滚事务
                        Db::rollback();
                    }
                }
            }
        }
    }

     //微信回调解密
    public function wechartDecrypt($text,$associated_data,$nonce) {
        $key = 'XXXXXXXXXXXXXXX';//商户平台设置的api v3 密码
        $str = sodium_crypto_aead_aes256gcm_decrypt($text,$associated_data,$nonce,$key);
        return json_decode($str,true);
    }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

炒鸡时光机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值