Berbicara tentang WeChat Pay, saya percaya semua orang akrab dengannya, tetapi ketika kita ingin menyelesaikan program ini, bagaimana seharusnya programmer kita menulis dan mengaturnya? Jangan khawatir, hari ini editor saluran teknologi baru bug telah memberi Anda contoh, mari kita pergi ke artikel berikut untuk mempelajari lebih lanjut!
Pendahuluan: Distributor, Bagaimana Menarik Uang Tunai dari Bisnis WeChat?
Bayar langsung dengan WeChat.
Implementasi adalah sebagai berikut:
Konfigurasi Pembayaran WeChat
/*Pembayaran weChat*/'pay_weixin' => array ('appId' => 'xxxx', 'appsecret' => 'xxxxxx,' mchid '=>' 1283301801 ', // nomor pedagang' Key '=>' zhudiianbaodianbaoCoIC = 'Key' => 'zhudiianbaodianbaoCerbaooC =' zhudianbaodianbaoC = 'Conf/cert/apiclient_cert.pem', // sertifikat pedagang apiclient_cert.pem 'apiclient_key' => 'conf/cert/apiclient_key.pem', // sertifikat pedagang apiclient_key.pem)arraytoxml
/*** array ke xml*/function arraytoxml ($ arr) {$ xml = "<xml>"; foreach ($ arr as $ key => $ val) {if (is_numeric ($ val)) {$ xml. = "<". $ key. ">" $ val. "</". $ key. ">"; } else $ xml. = "<". $ key. "> <! [CDATA [". $ val. "]]> </". $ key. ">"; } $ xml. = "</xml>"; mengembalikan $ xml;}Gunakan sertifikat untuk mengirimkan XML ke URL antarmuka yang sesuai di pos
/*** Fungsi: Gunakan sertifikat untuk mengirimkan XML ke antarmuka yang sesuai URL*/fungsi postxmlsslcurl ($ xml, $ url, $ detik, $ cert, $ key) {$ ch = curl_init (); // Waktu timeout curl_setopt ($ ch, curlopt_timeout, $ detik? $ Kedua: $ this-> timeout); // atur proxy di sini, jika ada satu // curl_setopt ($ ch, curlopt_proxy, '8.8.8.8'); // curl_setopt ($ ch, curlopt_proxyport, 8080); curl_setopt ($ ch, curlopt_url, $ url); curl_setopt ($ ch, curlopt_ssl_verifypeer, false); curl_setopt ($ ch, curlopt_ssl_verifyhost, false); // atur header curl_setopt ($ ch, curlopt_header, false); // Atur hasilnya sebagai string dan output ke layar curl_setopt ($ ch, curlopt_returntransfer, true); // Atur sertifikat // Gunakan sertifikat: sertifikat dan kunci itu milik dua file .pem masing -masing // format default adalah PEM, Anda dapat menganotasi curl_setopt ($ ch, curlopt_sslcertType, 'PEM'); curl_setopt ($ ch, curlopt_sslcert, $ cert); // Format default adalah PEM, Anda dapat memberi anotasi curl_setopt ($ ch, curlopt_sslkeytype, 'PEM'); curl_setopt ($ ch, curlopt_sslkey, $ key); // Metode pengiriman pos CURL_SETOPT ($ ch, curlopt_post, true); curl_setopt ($ ch, curlopt_postfields, $ xml); $ data = curl_exec ($ ch); // hasil pengembalian jika ($ data) {curl_close ($ ch); mengembalikan $ this-> xmltoArray ($ data); } else {$ error = curl_errno ($ ch); echo "kesalahan keriting, kode kesalahan: $ error". "<br>"; curl_close ($ ch); mengembalikan false; }}Bisnis membayar individu
// Perusahaan membayar paytouser fungsi publik individu ($ params, $ key, $ apcent_cert, $ apiclient_key) {$ url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; // Deteksi Parameter yang Diperlukan if ($ params ["mitra_trade_no"] == null) {// keluar ("Antarmuka aplikasi pengembalian dana, parameter yang diperlukan mitra_trade_no!". "<br>"); } elseif ($ params ["openId"] == null) {exit ("Antarmuka aplikasi pengembalian dana, parameter yang diperlukan OpenId!". "<br>"); } elseif ($ params ["check_name"] == null) {// no_check: Tidak ada nama asli verifikasi force_check: verifikasi yang kuat dari nama asli (pengguna tanpa nama asli yang tidak dapat diverifikasi, dan transfer yang tidak dapat ditransfer). antarmuka, parameter yang diperlukan check_name hilang! "." <br> "); } elseif (($ params ["check_name"] == 'force_check' atau $ params ["check_name"] == 'option_check') && ($ params ["re_user_name"] == null)) {// Nama asli pengguna pembayaran. EXIT ("Antarmuka Aplikasi Pengembalian dana, parameter yang diperlukan RE_USER_NAME tidak ada!". "<br>"); } elseif ($ params ["jumlah"] == null) {exit ("Antarmuka aplikasi pengembalian dana, jumlah parameter yang diperlukan tidak ada!". "<br>"); } elseif ($ params ["desc"] == null) {exit ("Antarmuka aplikasi pengembalian dana, parameter yang diperlukan Desc!". "<br>"); } $ params ["mch_appid"] = $ this-> appid; // public account id $ params ["mchid"] = $ this-> mchid; // nomor pedagang $ params ["nonce_str"] = $ this-> createNoncestr (); // random string $ params ['spbill_create_preate' ’ip '] ='] = '] [) _ _ _ _ @ @ @ @ @ » '192.127.1.1': $ _Server ['Remote_addr']; // Dapatkan ip $ params ["tanda"] = $ this-> getsign ($ params, $ key); // tanda tangan $ xml = $ this-> arraytoxml ($ params); Return $ this-> PostXMLSSLCURL ($ XML, $ URL, FALSE, $ APCENT_CERT, $ APICLIENT_KEY);}Pembayaran Bisnis
Fungsi Pribadi _EnterPrisePay ($ number, $ Member_ID, $ Jumlah, $ desc) {// Dapatkan OpenId $ wxuser_id = m ('anggota')-> di mana (array ('id' => $ member_id))-> getField ('wxuser_id'); $ openId = m ('wxuser')-> di mana (array ('id' => $ wxuser_id))-> getField ('openId'); $ pay = c ('pay_weixin'); impor ('@@. Action.wxdevelop'); $ enterprise = wxenterprise baru ($ pay ['appid'], $ pay ['appsecret'], $ pay ['mchid']); $ params = array ('mitra_trade_no' => $ number, 'openId' => $ openId, 'check_name' => 'no_check', 'jumlah' => $ jumlah, // total 'desc' => $ desc,); $ result = $ enterprise-> paytouser ($ params, $ pay ['key'], $ pay ['apiclient_cert'], $ pay ['apiclient_key']); mengembalikan $ hasil;}Proses penarikan distributor
Fungsi Pribadi _Handle ($ truename, $ price) {// Tangani penarikan distributor $ penarikan = tanggal ("ymdhis"). Strval (Rand (1000, 9999)); $ data = array ('netrence' => $ nickId, 'store_id' => $ this-> store_id, 'member_id' => $ this-> anggota_id, 'truename' => $ truename, 'harga' => $ harga, 'addTime' => waktu ()); // tidak ada audit if ($ price> = c ('retrup_uncheck_value')) {$ data ['need_check'] = 0; $ data ['status'] = 1; if ($ this-> retruptmodel-> add ($ data)) {$ result = $ this-> _ enterprisepay ($ penarikan, $ this-> member_id, $ price * 100, 'distribusi ('. $ truename. ') mundur'); // Setelah kesalahan dalam informasi pembayaran, itu perlu ditinjau jika ($ result ['return_code']! = 'Success') {$ this-> penarikan Model-> di mana (array ('penarikan' => $ penarikan))-> save (array ('need_check' => 1, 'status' => 0)); $ this-> penugasan ('sukses', 2); } else {// atur nomor transaksi weChat $ this-> retrupmodel-> where (array ('shipid' => $ nickdd))-> save (array ('payment_no' => $ result ['payment_no'])); // Tingkatkan aliran komisi, untuk diperbaiki $ data = array ('Store_id' => $ this-> store_id, 'user_type' => 2, 'user_id' => $ this-> shop_id, 'trade_type' => 2, 'trade_no' => penarikan, 'harga' =>-$ harga, 'status' => 1, '= 1,', 'Pesan' =>. waktu()); M ('twitter_log')-> add ($ data); // Kurangi komisi yang sesuai m ('anggota')-> di mana (array ('id' => $ this-> anggota_id))-> setinc ('uang',-$ harga); $ this-> penugasan ('sukses', 1); // Kirim Pesan Ubah Komisi Impor ('@. Action.tmplmsg'); $ tMPLMSG = TMPLMSG baru (); $ tMPLMSG-> Kirim (tMPLMSG :: Price_Change, $ this-> Member_ID, array ('token' => $ this-> token, 'intro' => 'transfer penarikan komisi distribusi', 'harga' => $ harga, 'bisnis' => bisnis)); }} else {$ this-> error ('kesalahan informasi penarikan tunai!'); }} // ulasan diperlukan lain {$ this-> retrupModel-> add ($ data); $ this-> penugasan ('sukses', 2); }}Memberikan fungsi perusahaan untuk membayar kepada pengguna, mendukung perusahaan untuk membayar melalui antarmuka API, atau mengoperasikan pembayaran melalui fungsi web Platform Pedagang Pembayaran WeChat.
Tips yang baik:
◆ Bayar kepada pengguna nama nyata yang sama, batas harian untuk transaksi tunggal adalah 2W/2W
◆ Pembayaran untuk pengguna non-real yang sama, dengan satu transaksi dan satu batas harian tunggal 2000/2000
◆ Batas total pembayaran untuk pedagang pada hari yang sama adalah 100W
◆ Hanya appid yang terikat pada nomor pedagang yang didukung;
◆ Untuk pengguna target pembayaran, pengguna yang telah diautentikasi oleh WeChat Pay dapat memberikan fungsi memverifikasi nama asli mereka. Pengguna yang belum diautentikasi dengan nama asli tidak dapat memverifikasi. Perusahaan dapat memilih jenis verifikasi berdasarkan tingkat keamanan bisnis mereka sendiri;
◆ Jumlah pembayaran harus kurang dari atau sama dengan jumlah yang saat ini tersedia untuk pedagang;
◆ Untuk catatan berbayar, perusahaan dapat melihat data yang sesuai melalui permintaan pembayaran perusahaan.
Kedatangan
Dana pembayaran akan memasukkan perubahan pengguna target (wechat-i-wallet-change). WeChat Pay akan membuat pemberitahuan perubahan dalam akun, dan detail perubahan pendapatan dan pengeluaran akan ditampilkan.
Tips yang baik:
Untuk versi klien historis dari akun perubahan, dana akan memasukkan akun amplop merah pengguna, dan WeChat Pay akan memberi tahu pengguna tanpa pesan apa pun, dan perusahaan dapat memilih untuk menjangkau pengguna sendiri.
Tautan antarmuka: https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
Adalah sertifikat yang diperlukan
Sertifikat dua arah diperlukan untuk permintaan.
Contoh Data:
<xml> <cch_appid> wxe062425f740c30d8 </cch_appid> <Chid> 10000098 </chid> <nonce_str> 3pg2j4iltkch16cq2502si8znmt M67vs </sce_str> <parta_trade_no> 100000982014120919616 </partner_trade_no> <pen openid> oho4gt7wvpxit1a9gjfamiziz Y1s </pen OpenId> <check_name> option_check </check_name> <fe_user_name> zhang san </se_user_name> <spuf> 100 </smangkan> <desc> senang Holiday! </desc> <pbill_create_ip> 10.2.3.10 </pbill_create_ip> <ditch> C97BDBACF37622775366F38B629F45E3 </Sign> </xml>
Contoh Sukses:
<xml> <return_code> <! [Cdata [Success]]> </return_code> <agulat_msg> <! [Cdata []]> </eturn_msg> <cch_appid> <! [Cdata [WXEC38B8FF840 bd989]]> </cch_appid> <Chid> <! [Cdata [10013274]]> </chid> <device_info> <! [Cdata []]> </device_info> <nonce_str> <! [Cdata [lxudzmnr jpcxzxlx0q]]> </sce_str> <Rances_code> <! [Cdata [Success]]> </result_code> <parta_trade_no> <! [Cdata [100135742015051915265824 41]]> </mitra_trade_no> <payment_no> <! [Cdata [1000018301201505190181489473]]> </payment_no> <payment_time> <! [Cdata [2015-05-19 15:26:59]]> </payment_time> </xml>
Contoh kesalahan:
<xml> <return_code> <! [cdata [fail]]> </ return_code> <agulat_msg> <! [Cdata [sistem sibuk, coba lagi lagi nanti.]]> </return_msg> <rence_code> <! [Cdata [fail]]> </result_code> <err_code> <! [Cdata [SystemError]]> </cr_code> <cerr_code_des> <! [Cdata [Sistem sibuk, silakan coba lagi.]] <cr_code_des> <!
For more information about PHP related content, please check out the topics of this site: "Summary of PHP WeChat Development Skills", "Summary of PHP encoding and transcoding operation techniques", "Summary of PHP network programming techniques", "Introduction to PHP basic syntax tutorial", "Summary of php string usage", "Introduction to PHP database operation tutorial" and "Summary of common php database operation teknik "
Saya berharap bahwa penjelasan terperinci tentang metode penerapan pembayaran akun perusahaan WeChat di PHP yang dijelaskan dalam artikel ini akan bermanfaat bagi semua orang untuk mempelajari pemrograman PHP. Saya harap semua orang akan terus mendukung saluran teknologi baru yang salah!