微信小程序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);
    }

你可能感兴趣的:(后端,小程序,微信)