Rumah >pembangunan bahagian belakang >tutorial php >Panduan Pembayaran Dalam Talian dan Pemprosesan Bayaran Balik dengan PHP dan Program Mini

Panduan Pembayaran Dalam Talian dan Pemprosesan Bayaran Balik dengan PHP dan Program Mini

王林
王林asal
2023-07-04 13:19:391199semak imbas

Panduan Pembayaran Dalam Talian dan Pemprosesan Bayaran Balik dengan PHP dan Program Mini

Dengan perkembangan berterusan e-dagang, semakin banyak syarikat mula menggunakan fungsi pembayaran dan bayaran balik dalam talian untuk menyediakan pengguna kaedah pembayaran yang mudah dan pantas. Sebagai bahasa pengaturcaraan sebelah pelayan yang biasa digunakan, PHP boleh digabungkan dengan program kecil untuk merealisasikan fungsi pembayaran dan bayaran balik dalam talian. Artikel ini akan memperkenalkan cara menggunakan PHP dan program mini untuk membangunkan pembayaran dalam talian dan fungsi bayaran balik, dan menyediakan sampel kod untuk rujukan pembaca.

1. Fungsi pembayaran dalam talian

  1. Persediaan

Pertama, kita perlu menyediakan akaun dan kunci pedagang, serta antara muka API pembayaran WeChat. Dalam program mini, kita boleh menggunakan antara muka pembayaran program mini WeChat Pay untuk melengkapkan fungsi pembayaran. Untuk butiran, sila rujuk dokumentasi pembangunan Pembayaran WeChat.

  1. Pembangunan Pelanggan

Di halaman hujung hadapan program mini, kita boleh menggunakan kaedah wx.requestPayment() WeChat Pay untuk mengaktifkan fungsi pembayaran. Kod khusus adalah seperti berikut:

wx.requestPayment({
  'timeStamp': '',
  'nonceStr': '',
  'package': '',
  'signType': 'MD5',
  'paySign': '',
  'success': function(res){
     // 支付成功的回调函数
  },
  'fail': function(res){
     // 支付失败的回调函数
  }
})

Dalam kaedah ini, kami perlu memasukkan beberapa parameter pembayaran, seperti cap waktu, rentetan rawak, maklumat pesanan, dsb. Parameter ini boleh didapati dari bahagian pelayan Untuk butiran, sila rujuk dokumentasi pembangunan Pembayaran WeChat.

  1. Pembangunan bahagian pelayan

Di bahagian pelayan, kita perlu menggunakan PHP untuk memproses permintaan pembayaran Kod khusus adalah seperti berikut:

<?php
  $appid = 'your_appid'; // 小程序的appid
  $mch_id = 'your_mch_id'; // 商户号
  $key = 'your_key'; // 商户密钥
  $body = '商品描述';
  $out_trade_no = '订单号';
  $total_fee = '总金额';

  $params = array(
    'appid' => $appid,
    'mch_id' => $mch_id,
    'nonce_str' => md5(rand()),
    'body' => $body,
    'out_trade_no' => $out_trade_no,
    'total_fee' => $total_fee,
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
    'trade_type' => 'JSAPI',
    'openid' => '用户openid'
  );

  ksort($params);
  $string = http_build_query($params);
  $string = urldecode($string).'&key='.$key;
  $sign = strtoupper(md5($string));

  $params['sign'] = $sign;

  $xml = '<xml>';
  foreach ($params as $key => $value) {
    $xml .= '<'.$key.'>'.$value.'</'.$key.'>';
  }
  $xml .= '</xml>';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.mch.weixin.qq.com/pay/unifiedorder');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  curl_close($ch);

  $result = simplexml_load_string($result);
  $prepay_id = $result->prepay_id; // 预支付id

  $params = array(
    'appId' => $appid,
    'timeStamp' => time(),
    'nonceStr' => md5(rand()),
    'package' => 'prepay_id='.$prepay_id,
    'signType' => 'MD5'
  );

  ksort($params);
  $string = http_build_query($params);
  $string = urldecode($string).'&key='.$key;
  $sign = strtoupper(md5($string));

  $params['paySign'] = $sign;

  echo json_encode($params);
?>

Dalam kod ini, kita perlu menjana tandatangan berdasarkan pedagang. akaun dan kunci, dan tambahkan parameter yang berkaitan disambungkan ke dalam rentetan format XML, dan permintaan pembayaran dihantar ke antara muka pembayaran WeChat melalui cURL. Selepas menerima keputusan pemulangan, kami menyambungkan ID prabayaran dalam keputusan ke dalam tandatangan lain, dan kemudian mengembalikan parameter yang berkaitan kepada applet.

2. Fungsi bayaran balik

  1. Pembangunan pelanggan

Di halaman hujung hadapan program mini, kami boleh menggunakan kaedah wx.request() untuk memulakan permintaan bayaran balik. Kod khusus adalah seperti berikut:

wx.request({
  url: 'https://your_domain.com/refund.php',
  method: 'POST',
  data: {
    'out_trade_no': '订单号',
    'refund_fee': '退款金额'
  },
  success: function(res){
     // 退款成功的回调函数
  },
  fail: function(res){
     // 退款失败的回调函数
  }
})
  1. Pembangunan sisi pelayan

Di bahagian pelayan, kita perlu menggunakan PHP untuk mengendalikan permintaan bayaran balik Kod khusus adalah seperti berikut:

<?php
  $appid = 'your_appid'; // 小程序的appid
  $mch_id = 'your_mch_id'; // 商户号
  $key = 'your_key'; // 商户密钥
  $out_trade_no = '订单号';
  $refund_fee = '退款金额';

  $params = array(
    'appid' => $appid,
    'mch_id' => $mch_id,
    'nonce_str' => md5(rand()),
    'out_trade_no' => $out_trade_no,
    'out_refund_no' => $out_trade_no,
    'total_fee' => $refund_fee,
    'refund_fee' => $refund_fee
  );

  ksort($params);
  $string = http_build_query($params);
  $string = urldecode($string).'&key='.$key;
  $sign = strtoupper(md5($string));

  $params['sign'] = $sign;

  $xml = '<xml>';
  foreach ($params as $key => $value) {
    $xml .= '<'.$key.'>'.$value.'</'.$key.'>';
  }
  $xml .= '</xml>';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.mch.weixin.qq.com/secapi/pay/refund');
  curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
  curl_setopt($ch, CURLOPT_SSLCERT, 'cert.pem');
  curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
  curl_setopt($ch, CURLOPT_SSLKEY, 'key.pem');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  curl_close($ch);

  $result = simplexml_load_string($result);

  if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS') {
    // 退款成功的处理逻辑
  }
?>

Dalam kod ini, kita perlu terlebih dahulu untuk menggunakan akaun pedagang dan kunci Jana tandatangan, gabungkan parameter yang berkaitan ke dalam rentetan format XML dan hantar permintaan bayaran balik ke antara muka pembayaran WeChat melalui cURL. Selepas menerima keputusan pulangan, kami boleh menentukan sama ada bayaran balik berjaya berdasarkan return_code dan result_code dalam hasilnya.

3. Ringkasan

Melalui langkah di atas, kita boleh menggunakan program PHP dan mini untuk membangunkan fungsi pembayaran dan bayaran balik dalam talian. Dalam aplikasi praktikal, fungsi juga boleh dikembangkan mengikut keperluan khusus, seperti menambah pertanyaan pesanan, pertanyaan bayaran balik dan fungsi lain. Saya harap artikel ini akan membantu anda apabila menggunakan program PHP dan mini untuk membangunkan fungsi pembayaran dan bayaran balik dalam talian.

Atas ialah kandungan terperinci Panduan Pembayaran Dalam Talian dan Pemprosesan Bayaran Balik dengan PHP dan Program Mini. 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