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);
}
微信小程序APIv3支付回调解密
最新推荐文章于 2024-06-28 11:34:28 发布