เมื่อพูดถึง WeChat Pay ฉันเชื่อว่าทุกคนคุ้นเคยกับมัน แต่เมื่อเราต้องการเสร็จสิ้นโปรแกรมนี้โปรแกรมเมอร์ของเราควรเขียนและตั้งค่าอย่างไร ไม่ต้องกังวลวันนี้บรรณาธิการของช่องทางเทคโนโลยีใหม่ของข้อผิดพลาดได้นำตัวอย่างมาให้คุณลองไปที่บทความต่อไปนี้เพื่อเรียนรู้เพิ่มเติม!
บทนำ: ผู้จัดจำหน่ายวิธีถอนเงินจากธุรกิจ WeChat?
จ่ายโดยตรงกับ WeChat
การดำเนินการมีดังนี้:
การกำหนดค่าการชำระเงิน WeChat
/*การชำระเงิน weChat*/'pay_weixin' => array ('appid' => 'xxxx', 'appsecret' => 'xxxxxx,' mchid '=>' 1283301801 ', // หมายเลขพ่อค้า' 'conf/cert/apiclient_cert.pem', // ใบรับรองผู้ค้า apiclient_cert.pem 'apiclient_key' => 'conf/cert/apiclient_key.pem', // ใบรับรองการค้า apiclient_key.pem)arraytoxml
/*** อาร์เรย์เป็น xml*/ฟังก์ชั่น arraytoxml ($ arr) {$ xml = "<xml>"; foreach ($ arr เป็น $ key => $ val) {ถ้า (is_numeric ($ val)) {$ xml. = "<". $ key. ">". $ val. "</". $ key. ">"; } else $ xml. = "<". $ key. "> <! [cdata [". $ val. "]> </". $ key. ">"; } $ xml. = "</xml>"; ส่งคืน $ xml;}ใช้ใบรับรองเพื่อส่ง XML ไปยัง URL อินเตอร์เฟสที่เกี่ยวข้องในโพสต์
/*** ฟังก์ชั่น: ใช้ใบรับรองเพื่อส่ง XML ไปยัง URL อินเตอร์เฟสที่เกี่ยวข้อง*/ฟังก์ชั่น postxmlsslcurl ($ xml, $ url, $ วินาที, $ cert, $ cert, $ key) {$ ch = curl_init (); // เวลาหมดเวลา curl_setopt ($ ch, curlopt_timeout, $ วินาที? $ วินาที: $ this-> หมดเวลา); // ตั้งค่าพร็อกซีที่นี่ถ้ามีหนึ่ง // 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); // ตั้งส่วนหัว curl_setopt ($ ch, curlopt_header, false); // ตั้งค่าผลลัพธ์เป็นสตริงและเอาต์พุตไปยังหน้าจอ CURL_SETOPT ($ CH, CURLOPT_RETURNTRANSFER, TRUE); // ตั้งค่าใบรับรอง // ใช้ใบรับรอง: ใบรับรองและคีย์มันเป็นของไฟล์. pem สองไฟล์ตามลำดับ // รูปแบบเริ่มต้นคือ PEM คุณสามารถใส่คำอธิบายประกอบ 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); // วิธีการส่งโพสต์ curl_setopt ($ ch, curlopt_post, true); curl_setopt ($ ch, curlopt_postfields, $ xml); $ data = curl_exec ($ ch); // ส่งคืนผลลัพธ์ถ้า ($ data) {curl_close ($ ch); ส่งคืน $ this-> xmltoarray ($ data); } else {$ error = curl_errno ($ ch); echo "ข้อผิดพลาด curl, รหัสข้อผิดพลาด: $ error". "<br>"; curl_close ($ ch); กลับเท็จ; -ธุรกิจจ่ายเงินบุคคล
// องค์กรจ่ายค่าใช้จ่ายสาธารณะ paytouser ($ params, $ key, $ apcent_cert, $ apiclient_key) {$ url = 'https://api.mch.weixin.qq.com/mmpaymktransfers/promotion/transfers'; // การตรวจจับพารามิเตอร์ที่ต้องการถ้า ($ params ["partner_trade_no"] == null) {// exit ("อินเทอร์เฟซแอปพลิเคชันคืนเงินพารามิเตอร์ที่ต้องการ partner_trade_no!". "<br>"); } elseif ($ params ["openId"] == null) {ออก ("อินเตอร์เฟสแอปพลิเคชันคืนเงิน, พารามิเตอร์ที่ต้องการ OpenId!". "<br>"); } elseif ($ params ["check_name"] == null) {// no_check: ไม่มีการตรวจสอบชื่อจริง force_check: การตรวจสอบที่แข็งแกร่งของชื่อจริง (ผู้ใช้ที่ไม่มีชื่อจริงจะไม่สามารถตรวจสอบได้ อินเตอร์เฟสพารามิเตอร์ที่ต้องการตรวจสอบ _name หายไป! "." <br> "); } elseif (($ params ["check_name"] == 'force_check' หรือ $ params ["check_name"] == 'option_check') && ($ params ["re_user_name"] == null)) {// ชื่อจริงของผู้ใช้การชำระเงิน ออก ("อินเทอร์เฟซแอปพลิเคชันคืนเงินพารามิเตอร์ที่ต้องการ re_user_name หายไป!". "<br>"); } elseif ($ params ["จำนวน"] == null) {ออก ("อินเตอร์เฟสแอปพลิเคชันคืนเงินจำนวนพารามิเตอร์ที่ต้องการหายไป!". "<br>"); } elseif ($ params ["desc"] == null) {ออก ("อินเตอร์เฟสแอปพลิเคชันคืนเงินพารามิเตอร์ที่ต้องการ desc!". "<br>"); } $ params ["mch_appid"] = $ this-> appid; // id บัญชีสาธารณะ $ params ["mchid"] = $ this-> mchid; // หมายเลขผู้ค้า $ params ["nonce_str"] = $ this-> createnoncest - '192.127.1.1': $ _Server ['remote_addr']; // รับ ip $ params ["sign"] = $ this-> getSign ($ params, $ key); // ลายเซ็น $ xml = $ this-> arraytoxml ($ params); ส่งคืน $ this-> postxmlsslcurl ($ xml, $ url, false, $ apcent_cert, $ apiclient_key);}การจ่ายเงินธุรกิจ
ฟังก์ชั่นส่วนตัว _Enterprisepay ($ number, $ member_id, $ จำนวน, $ desc) {// รับ openid $ wxuser_id = m ('member')-> ที่ไหน (array ('id' => $ member_id))-> getfield ('wxuser_id'); $ openId = m ('wxuser')-> โดยที่ (อาร์เรย์ ('id' => $ wxuser_id))-> getField ('openId'); $ pay = c ('pay_weixin'); นำเข้า ('@. action.wxdevelop'); $ enterprise = ใหม่ wxEnterprise ($ pay ['appid'], $ pay ['appsecret'], $ pay ['mchid']); $ params = array ('partner_trade_no' => $ number, 'openId' => $ openId, 'check_name' => 'no_check', 'จำนวน' => จำนวนเงิน, // ทั้งหมด 'desc' => $ desc,); $ result = $ enterprise-> paytouser ($ params, $ pay ['key'], $ pay ['apiclient_cert'], $ pay ['apiclient_key']); ส่งคืน $ ผลลัพธ์;}การถอนผู้จัดจำหน่ายกระบวนการ
ฟังก์ชั่นส่วนตัว _handle ($ truename, $ price) {// จัดการการถอนผู้จัดจำหน่าย $ deleadid = วันที่ ("ymdhis") Strval (Rand (1,000, 9999)); $ data = array ('deverid' => $ deverid, 'store_id' => $ this-> store_id, 'member_id' => $ this-> member_id, 'truename' => $ truename, 'ราคา' => $ ราคา 'addTime' => time (); // ไม่มีการตรวจสอบหาก ($ price> = c ('delextheck_uncheck_value')) {$ data ['need_check'] = 0; $ data ['สถานะ'] = 1; if ($ this-> dillemodel-> เพิ่ม ($ data)) {$ result = $ this-> _ enterprisepay ($ delexidid, $ this-> member_id, $ price * 100, 'การแจกจ่าย (' $ truename ') การถอน'); // หลังจากข้อผิดพลาดในข้อมูลการชำระเงินจะต้องมีการตรวจสอบถ้า ($ result ['return_code']! = 'success') {$ this-> dillemodel-> ที่ไหน (อาร์เรย์ ('ถอน' => $ delexidid))-> บันทึก (อาร์เรย์ ('need_check' => 1, 'สถานะ' => 0)); $ this-> กำหนด ('ความสำเร็จ', 2); } else {// ตั้งค่าหมายเลขธุรกรรม WeChat $ this-> dillemodel-> โดยที่ (array ('deleplid' => $ delzedd))-> บันทึก (array ('payment_no' => $ result ['payment_no'])); // เพิ่มการไหลของค่าคอมมิชชั่น, จะได้รับการแก้ไข $ data = array ('store_id' => $ this-> store_id, 'user_type' => 2, 'user_id' => $ this-> shop_id, 'trade_type' => 2, 'trade_no' => $ dilledid ' => เวลา ()); m ('twitter_log')-> เพิ่ม ($ data); // ลดค่าคอมมิชชั่นที่เกี่ยวข้อง m ('member')-> โดยที่ (array ('id' => $ this-> member_id))-> setinc ('เงิน',-$ ราคา); $ this-> กำหนด ('ความสำเร็จ', 1); // ส่งค่าคอมมิชชั่นเปลี่ยนข้อความนำเข้า ('@. action.tmplmsg'); $ tmplmsg = new tmplmsg (); $ tmplmsg-> ส่ง (tmplmsg :: price_change, $ this-> member_id, อาร์เรย์ ('โทเค็น' => $ this-> โทเค็น, 'อินโทร' => 'การโอนการโอนคณะกรรมการการแจกจ่าย', 'ราคา' => $ ราคา 'ธุรกิจ' => ธุรกิจ); }} else {$ this-> ข้อผิดพลาด ('ข้อผิดพลาดข้อมูลการถอนเงินสด!'); }} // การตรวจสอบเป็นสิ่งจำเป็นอื่น ๆ {$ this-> dillemodel-> เพิ่ม ($ data); $ this-> กำหนด ('ความสำเร็จ', 2); -ให้ฟังก์ชั่นขององค์กรเพื่อจ่ายให้กับผู้ใช้สนับสนุนองค์กรเพื่อชำระเงินผ่านอินเตอร์เฟส API หรือดำเนินการชำระเงินผ่านฟังก์ชั่นเว็บแพลตฟอร์มการชำระเงิน WECHAT
เคล็ดลับชนิด:
◆จ่ายให้กับผู้ใช้ชื่อจริงเดียวกันขีด จำกัด รายวันสำหรับการทำธุรกรรมเดียวคือ 2W/2W
◆การชำระเงินให้กับผู้ใช้ที่ไม่ใช่จริงเดียวกันโดยมีธุรกรรมเดียวและขีด จำกัด รายวันเดียวที่ 2000/2000
◆วงเงินการชำระเงินทั้งหมดสำหรับผู้ค้าในวันเดียวกันคือ 100W
◆รองรับเฉพาะแอปพลิเคชันที่ผูกพันกับหมายเลขผู้ค้าเท่านั้น
◆สำหรับผู้ใช้เป้าหมายของการชำระเงินผู้ใช้ที่ได้รับการรับรองความถูกต้องโดย WeChat Pay สามารถให้ฟังก์ชั่นในการตรวจสอบชื่อจริงของพวกเขา ผู้ใช้ที่ไม่ได้รับการรับรองความถูกต้องด้วยชื่อจริงไม่สามารถตรวจสอบได้ องค์กรสามารถเลือกประเภทการตรวจสอบตามระดับความปลอดภัยของธุรกิจของตนเอง
◆จำนวนเงินการชำระเงินจะต้องน้อยกว่าหรือเท่ากับจำนวนเงินที่มีอยู่ในปัจจุบันสำหรับผู้ค้า
◆สำหรับบันทึกที่ชำระเงินองค์กรสามารถดูข้อมูลที่เกี่ยวข้องผ่านแบบสอบถามการชำระเงินขององค์กร
การมาถึง
กองทุนการชำระเงินจะเข้าสู่การเปลี่ยนแปลงของผู้ใช้เป้าหมาย (WeChat-i-Wallet-Change) WeChat Pay จะทำการแจ้งเตือนการเปลี่ยนแปลงในบัญชีและรายละเอียดการเปลี่ยนแปลงและรายละเอียดค่าใช้จ่ายจะปรากฏขึ้น
เคล็ดลับชนิด:
สำหรับบัญชีการเปลี่ยนแปลงเวอร์ชันไคลเอนต์ประวัติกองทุนจะเข้าสู่บัญชีซองจดหมายสีแดงของผู้ใช้และ WeChat Pay จะแจ้งผู้ใช้โดยไม่มีข้อความใด ๆ และองค์กรสามารถเลือกเข้าถึงผู้ใช้ด้วยตนเอง
ลิงค์อินเตอร์เฟส: https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
เป็นใบรับรองที่จำเป็น
ต้องมีใบรับรองสองทางสำหรับการร้องขอ
ตัวอย่างข้อมูล:
<XML> <MCH_Appid> WXE062425F740C30D8 </MCH_AppID> <MCHID> 10000098 </MCHID> m67vs </nonce_str> <marter_trade_no> 100000982014120919616 </partner_trade_no> <PotainId> OHO4GT7WVPXIT1A9GJFAMYMIZ y1s </potId> <heck_name> optupt_check </check_name> <re_user_name> Zhang San </re_user_name> วันหยุด! </esc> <SPBILL_CREATE_IP> 10.2.3.10 </SPBILL_CREATE_IP> <mign> C97BDBACF37622775366F38B629F45E3 </ign> </xml>
ตัวอย่างที่ประสบความสำเร็จ:
<xml> <return_code> <! [cdata [success]]> </returned_code> <return_msg> <! [cdata []]> </return_msg> <mch_appid> <! bd989]]> </mch_appid> <mchid> <! [cdata [10013274]]> </mchid> <vice_info> <! [cdata []]> </device_info> jpcxzxlx0q]]> </nonce_str> <result_code> <! [cdata [ความสำเร็จ]]> </result_code> <marter_trade_no> <! [CDATA [100135742015051915265824 41]]> </partner_trade_no> <paying_no> <! [CDATA [1000018301201505190181489473]]> </payment_no> <Paymay_time> <! [CDATA [2015-05-19-19 15:26:59]]> </pay_time> </xml>
ตัวอย่างข้อผิดพลาด:
<xml> <turned_code> <! [cdata [ล้มเหลว]]> </return_code> <return_msg> <! [cdata [ระบบไม่ว่างโปรดลองอีกครั้ง ในภายหลัง]]> </return_msg> <result_code> <! [cdata [ล้มเหลว]]> </result_code> <err_code> <! [cdata [systemerror]]> </err_code> <err_code_des> <! [cdata [ระบบไม่ว่างโปรดลองอีกครั้งในภายหลัง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาที่เกี่ยวข้องกับ PHP โปรดตรวจสอบหัวข้อของไซต์นี้: "สรุปทักษะการพัฒนา WeChat PHP", "บทสรุปของการเข้ารหัส PHP และเทคนิคการทำงาน transcoding", "สรุปการเขียนโปรแกรมเครือข่าย PHP" การแนะนำการใช้งาน PHP เทคนิคการดำเนินงาน "
ฉันหวังว่าคำอธิบายโดยละเอียดเกี่ยวกับวิธีการดำเนินการชำระเงินบัญชี WeChat Enterprise ใน PHP ที่อธิบายไว้ในบทความนี้จะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้การเขียนโปรแกรม PHP ฉันหวังว่าทุกคนจะยังคงสนับสนุนช่องทางเทคโนโลยีใหม่ที่ผิด!