Bilakah kita harus menulis logik untuk url panggilan balik? Dokumen tersebut tidak menjelaskan perkara ini secara terperinci
光陰似箭催人老,日月如移越少年。
Saya rasa anda mungkin tidak membaca dokumen tersebut dengan teliti, disertakan gambar rajah jujukan proses perniagaan pembayaran.
Rajah jujukan ini menerangkan dengan jelas: selepas pengguna mengesahkan pembayaran dan memasukkan kata laluan, dan kebenaran pengesahan WeChat berjaya, pedagang akan dimaklumkan tentang hasil pembayaran secara tidak segerak (perlu diingat bahawa ini termasuk dua situasi: pembayaran yang berjaya dan pembayaran gagal), pedagang mengemas kini logik perniagaan pesanan mereka berdasarkan parameter yang dikembalikan oleh WeChat.
Selepas anda membuat pembayaran pada telefon bimbit anda dan melihat pembayaran telah selesai, ini hanya boleh dianggap sebagai langkah pertama. Panggilan balik tidak akan berlaku sehingga pembayaran selesai, yang bermaksud menolak aliran transaksi pembayaran ke antara muka panggil balik.
public function noticeFirst() {
Vendor('WXPAYS.lib.WxPayPubHelper');
$notify = new \Notify_pub();
//存儲(chǔ)微信的回調(diào)
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$notify->saveData($xml);
$arr = $notify->data;
//驗(yàn)證簽名,并回應(yīng)微信。
//對(duì)后臺(tái)通知交互時(shí),如果微信收到商戶的應(yīng)答不是成功或超時(shí),微信認(rèn)為通知失敗,
//微信會(huì)通過(guò)一定的策略(如30分鐘共8次)定期重新發(fā)起通知,
//盡可能提高通知的成功率,但微信不保證通知最終能成功。
$wxpay_config = array(
'APPID' => '',
'MCHID' => '',
'KEY' => '',
'APPSECRET' => ''
);
if ($notify->checkSign($wxpay_config) === FALSE) {
$notify->setReturnParameter("return_code", "FAIL"); //返回狀態(tài)碼
$notify->setReturnParameter("return_msg", "簽名失敗"); //返回信息
} else {
$notify->setReturnParameter("return_code", "SUCCESS"); //設(shè)置返回碼
}
$returnXml = $notify->returnXml();
echo $returnXml;
//==商戶根據(jù)實(shí)際情況設(shè)置相應(yīng)的處理流程,此處僅作舉例=======
if ($notify->checkSign($wxpay_config) === TRUE) {
if ($arr["return_code"] == "FAIL") {
} elseif ($arr["result_code"] == "FAIL") {
} else {
$info = M('order')->where(array('order_sn' => $arr['out_trade_no']))->find();
if (!$info) {
exit('訂單信息有誤');
}
/* 修改訂單狀態(tài) */
$data['status'] = 1;
$time_end = substr($arr['time_end'], 0, 4) . '-' . substr($arr['time_end'], 4, 2) . '-' . substr($arr['time_end'], 6, 2) . ' ' . substr($arr['time_end'], 8, 2) . ':' . substr($arr['time_end'], 10, 2). ':' . substr($arr['time_end'], 12, 2);
$data['pay_time'] = strtotime($time_end);
M('order')->where(array('order_id' => $info['order_id']))->save($data);
$total_fee=$arr['total_fee'];
/* 添加支付流水 */
$_data['appid'] = $arr['appid'];
$_data['bank_type'] = $arr['bank_type'];
$_data['cash_fee'] = $arr['cash_fee'];
$_data['fee_type'] = $arr['fee_type'];
$_data['is_subscribe'] = $arr['is_subscribe'];
$_data['mch_id'] = $arr['mch_id'];
$_data['openid'] = $arr['openid'];
$_data['out_trade_no'] = $arr['out_trade_no'];
$_data['result_code'] = $arr['result_code'];
$_data['return_code'] = $arr['result_code'];
$_data['total_fee'] = $total_fee;
$_data['trade_type'] = $arr['trade_type'];
$_data['transaction_id'] = $arr['transaction_id'];
$_data['nonce_str'] = $arr['nonce_str'];
$_data['sign'] = $arr['sign'];
$_data['time_end'] = $arr['time_end'];
$pay_flow_id=M('payment_flow')->add($_data);
/* 添加財(cái)務(wù)流水 */
//訂單ID
$_trans_data['order_id']=$info['order_id'];
//會(huì)員ID
$_trans_data['user_id']=$info['user_id'];
//交易流水號(hào)
$_trans_data['flow_id']=$pay_flow_id;
//交易類型
$_trans_data['trans_type']='1';
//交易渠道
$_trans_data['trans_channel']='1';
$_trans_data['amount']=$total_fee*0.01;
$_trans_data['add_time']=time();
M('trans_flow')->add($_trans_data);
}
//商戶自行增加處理流程,
//例如:更新訂單狀態(tài)
//例如:數(shù)據(jù)庫(kù)操作
//例如:推送支付完成信息
}
}
Ya, tetapkan url panggil balik semasa membayar Selepas pembayaran berjaya, WeChat akan memanggil url ini secara aktif dan kemudian memproses logik untuk mengemas kini pesanan.