Dalam perniagaan Internet, senario yang melibatkan transaksi dana seperti pembayaran, caj semula, bayaran balik dan pengeluaran tunai adalah penting. Ini memerlukan sistem untuk dapat melakukan pemberitahuan tak segerak untuk memaklumkan kedua-dua pihak tentang keputusan transaksi. Dalam senario ini, PHP, sebagai bahasa pembangunan back-end yang sangat popular, digunakan secara meluas Dalam artikel ini kami akan menerangkan cara menggunakan PHP untuk melaksanakan pemberitahuan tak segerak.
1. Apakah itu pemberitahuan tak segerak?
Selepas pengguna menjalankan transaksi, pihak yang membayar atau penerima akan menerima pemberitahuan tentang transaksi yang berjaya supaya kedua-dua pihak dapat memahami keputusan transaksi tepat pada masanya. Dalam senario ini, jika pemberitahuan segerak digunakan, masa transaksi mungkin lebih lama, pengalaman pengguna mungkin lemah, transaksi mungkin gagal dan kebolehpercayaan transaksi mungkin terjejas. Oleh itu, kami menggunakan pemberitahuan tak segerak, iaitu, menggunakan fungsi panggil balik untuk memberitahu hasil transaksi.
2. Langkah untuk melaksanakan pemberitahuan tak segerak dalam PHP
Mari kita ambil senario pembayaran sebagai contoh untuk memperkenalkan cara menggunakan PHP untuk melaksanakan pemberitahuan tak segerak.
Apabila pengguna memulakan permintaan pembayaran dalam aplikasi, bahagian belakang akan menghantar permintaan pembayaran ke platform pembayaran dan menerima respons daripada platform pembayaran. Dan dapatkan URL pembayaran daripada respons.
Kod contoh PHP:
$data = [ 'amount' => '10.00', 'body' => '测试订单', 'channel' => 'alipay_wap', 'currency' => 'cny', 'return_url' => 'http://example.com/return', 'notify_url' => 'http://example.com/notify', ]; $result = curl_post('https://api.payment.com/payments', $data); $payment_url = isset($result['payment_url']) ? $result['payment_url'] : '';
Hantar permintaan POST melalui cURL, hubungi antara muka pembayaran platform, dan hantar platform pembayaran ke platform pembayaran Hantar permintaan pembayaran dan dapatkan hasil respons yang dikembalikan oleh platform pembayaran.
Kod contoh PHP:
function curl_post($url, $data = [], $header = []) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json', ) + $header); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); }
Tetapkan URL pemulangan dalam antara muka untuk pembayaran yang berjaya atau gagal Apabila , hasil pembayaran latar belakang dimaklumkan kepada aplikasi, dan ia juga boleh digunakan untuk menanyakan status transaksi.
Kod contoh PHP:
$data = [ 'amount' => '10.00', 'body' => '测试订单', 'channel' => 'alipay_wap', 'currency' => 'cny', 'return_url' => 'http://example.com/return', 'notify_url' => 'http://example.com/notify', ];
Parameter notify_url digunakan untuk menghantar alamat untuk menerima keputusan pembayaran dan alamat untuk menghantar pemberitahuan tak segerak oleh platform pembayaran.
Apabila platform pembayaran menerima permintaan pembayaran pengguna dan menyelesaikan transaksi, ia akan menghantar pemberitahuan tak segerak kepada notify_url yang ditentukan untuk memberitahu hasil pembayaran. Oleh itu, kami perlu mengesahkan tandatangan dan memproses logik perniagaan dalam fungsi panggil balik, dan mengembalikan maklumat pengesahan pada penghujungnya.
Kod contoh PHP:
function notify() { $data = $_POST; $time_now = time(); // 验证签名 if (!openssl_verify(json_encode($data), base64_decode($data['signature']), $public_key)) { return 'false'; } // 更新订单状态 update_order($data['order_id']); return 'success'; }
Memandangkan keputusan yang dihantar oleh platform pembayaran perlu memastikan kebolehpercayaannya, kami perlu mengesahkan keputusan yang dikembalikan oleh platform pembayaran Data disahkan. Semasa proses pengesahan tandatangan, kami perlu menggunakan kunci awam yang disediakan oleh platform pembayaran untuk mengesahkan tandatangan bagi memastikan bahawa ia adalah hasil yang sah yang dikeluarkan oleh platform pembayaran.
Kod contoh PHP:
if (!openssl_verify(json_encode($data), base64_decode($data['signature']), $public_key)) { return 'false'; }
Selepas pembayaran berjaya, maklumat status pesanan perlu dikemas kini supaya permohonan boleh memahami status sebenar pesanan. Dalam langkah ini kita boleh memanggil logik perniagaan untuk mengemas kini.
Kod contoh PHP:
function update_order($order_id) { // 调用业务逻辑处理订单状态更新 }
Selepas pemprosesan selesai, maklumat pengesahan perlu dikembalikan ke platform pembayaran untuk ditunjukkan bahawa kami telah melakukan segala yang kami mampu. Sahkan bahawa hasil pembayaran telah diproses dan kod pemulangan (seperti 200) menunjukkan bahawa pemprosesan telah berjaya.
Kod contoh PHP:
return 'success';
3 Elakkan kelemahan pemberitahuan tak segerak
Dalam proses menggunakan pemberitahuan tak segerak, untuk memastikan keselamatan, kita perlu mengelakkan kerentanan berikut:
4. Ringkasan
Artikel ini memperkenalkan proses penggunaan PHP untuk melaksanakan pemberitahuan tak segerak dan mencadangkan langkah berjaga-jaga keselamatan. Pemberitahuan tak segerak amat penting dalam senario transaksi kewangan, dan perhatian khusus perlu diberikan kepada keselamatan Isu seperti tandatangan, pemprosesan berulang dan risiko keselamatan perlu dipertimbangkan dengan teliti semasa reka bentuk untuk mengelakkan kelemahan dan ralat.
Atas ialah kandungan terperinci PHP melaksanakan pemberitahuan tak segerak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!