Rumah >pembangunan bahagian belakang >masalah PHP >PHP melaksanakan pemberitahuan tak segerak

PHP melaksanakan pemberitahuan tak segerak

WBOY
WBOYasal
2023-05-07 14:42:08909semak imbas

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.

  1. Mulakan permintaan pembayaran:

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'] : '';
  1. Panggil antara muka platform pembayaran:

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);
}
  1. Tetapkan URL pemulangan dalam antara muka:

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.

  1. Fungsi panggilan balik untuk menerima pemberitahuan tak segerak

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';
}
  1. Sahkan tandatangan

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';
}
  1. Kemas kini status pesanan

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)
{
    // 调用业务逻辑处理订单状态更新
}
  1. Pulangan maklumat pengesahan

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:

  1. Hanya kendalikan pemberitahuan tak segerak sekali, jika tidak, ia akan menyebabkan berbilang permintaan dan membawa risiko keselamatan yang tidak perlu.
  2. Pastikan tandatangan pengesahan keputusan semasa memproses pemberitahuan tak segerak untuk mengelakkan permintaan diganggu oleh pihak ketiga.
  3. Pastikan logik berfungsi pemprosesan hasil pemberitahuan tak segerak tidak gagal dan menyebabkan ketidakkonsistenan data.
  4. Pastikan URL pemberitahuan tak segerak tidak diusik apabila diberikan kepada pihak ketiga untuk mengelakkan penyerang daripada berniat jahat mengganggu alamat dan melakukan serangan CSRF.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn