Rumah >pembangunan bahagian belakang >tutorial php >Melaksanakan API Pembayaran BayarCash dengan Ruby: Sahkan Jumlah Cek

Melaksanakan API Pembayaran BayarCash dengan Ruby: Sahkan Jumlah Cek

Patricia Arquette
Patricia Arquetteasal
2025-01-25 14:03:10936semak imbas

Implementing BayarCash Payment API with Ruby: Validate Checksum

Mengintegrasikan platform pembayaran boleh menjadi mencabar, terutamanya apabila dokumentasi tidak mempunyai contoh dalam bahasa pilihan anda. Artikel ini memperincikan penyelesaian Ruby on Rails untuk mengesahkan jumlah cek BayarCash, halangan biasa bagi pemaju yang bekerja dengan gerbang pembayaran Malaysia ini. Dokumentasi rasmi menyediakan contoh PHP, tetapi panduan ini merapatkan jurang untuk pembangun Ruby.

Memahami Contoh PHP

Kod penjanaan checksum PHP BayarCash agak mudah: ia mengisih data muatan mengikut kunci, menggabungkan nilai dengan paip (|), dan menjana jumlah semak HMAC SHA256. Walau bagaimanapun, menterjemah secara langsung ini kepada Ruby memerlukan pertimbangan yang teliti terhadap struktur data dan kaedah pencincangan.

Penyelesaian Ruby on Rails yang Teguh

Kod Ruby berikut menyediakan kaedah yang selamat dan cekap untuk mengesahkan jumlah semak BayarCash dalam aplikasi Rails:

<code class="language-ruby"># Your BayarcashService class

def valid_checksum?(params)
  received_checksum = params['checksum']

  payload_data = {
    'record_type' => params['record_type'],
    'transaction_id' => params['transaction_id'],
    'exchange_reference_number' => params['exchange_reference_number'],
    'exchange_transaction_id' => params['exchange_transaction_id'],
    'order_number' => params['order_number'],
    'currency' => params['currency'],
    'amount' => params['amount'],
    'payer_name' => params['payer_name'],
    'payer_email' => params['payer_email'],
    'payer_bank_name' => params['payer_bank_name'],
    'status' => params['status'],
    'status_description' => params['status_description'],
    'datetime' => params['datetime']
  }

  sorted_payload = payload_data.sort.to_h
  payload_string = sorted_payload.values.join('|')
  generated_checksum = OpenSSL::HMAC.hexdigest('sha256', SECRET_KEY, payload_string)
  ActiveSupport::SecurityUtils.secure_compare(generated_checksum.downcase, received_checksum.downcase)
rescue => e
  Rails.logger.error "Checksum validation error: #{e.message}"
  false
end</code>

Kod ini menangani perbezaan utama antara PHP dan Ruby:

  1. Isih Cincang: hash.sort.to_h Ruby dengan berkesan mencerminkan ksort PHP.
  2. Penggabungan Rentetan: Kaedah join('|') menggabungkan nilai muatan yang diisih dengan cekap.
  3. Penjanaan Checksum: OpenSSL::HMAC.hexdigest menyediakan penjanaan checksum HMAC SHA256 yang selamat.
  4. Perbandingan Selamat: ActiveSupport::SecurityUtils.secure_compare menghalang serangan pemasaan semasa pengesahan checksum. Pengendalian ralat disertakan untuk keteguhan.

Kesimpulan

Pelaksanaan Ruby yang diperhalusi ini memastikan pengesahan ceksum BayarCash yang selamat dan boleh dipercayai dalam aplikasi Rails anda. Penyelesaian ini memperkemas proses penyepaduan dan meningkatkan keselamatan pemprosesan pembayaran anda.

Atas ialah kandungan terperinci Melaksanakan API Pembayaran BayarCash dengan Ruby: Sahkan Jumlah Cek. 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