การชำระเงิน WeChat ได้รับความนิยมมากขึ้นในขณะนี้และมีผลิตภัณฑ์มากมายที่สามารถเข้าถึงการชำระเงิน WeChat ได้อย่างรวดเร็ว อย่างไรก็ตามนอกเหนือจากความสะดวกแล้วมันยังทำให้เราค่อยๆพึ่งพาบุคคลที่สามในการทำสิ่งต่าง ๆ และสูญเสียความสามารถในการคิดอย่างอิสระ คราวนี้เราวางแผนที่จะแบ่งปันการชำระเงิน WeChat ที่ฉันได้พัฒนามาก่อน
1. การชำระเงินบัญชีอย่างเป็นทางการ H5
ประเด็นสำคัญ: ได้รับ OpenID และรวมอินเทอร์เฟซเดียวอย่างถูกต้องการแจ้งเตือนผลการชำระเงินอย่างถูกต้องและกำหนดค่าไดเรกทอรีการอนุญาตการชำระเงินอย่างถูกต้อง
วิธีการชำระเงินของ H5 เป็นวิธีที่ใช้กันอย่างแพร่หลาย วิธีการชำระเงินนี้ส่วนใหญ่ใช้สำหรับหน้าเว็บที่มีเมนูที่กำหนดเองใน WeChat ขึ้นอยู่กับไคลเอนต์ WeChat ที่ติดตั้งบนโทรศัพท์มือถือ เพียงรุ่นที่สูงกว่าของ WeChat รองรับการชำระเงิน WeChat โปรดทราบคำแนะนำต่อไปนี้สำหรับการทำตามกระบวนการของฉัน
1. เขียนหน้าสำหรับการชำระเงินเพราะเป็นการทดสอบมันง่ายกว่าเล็กน้อย
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerName ()+":"+request.getServerport ()+path+"/"; %> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>"> <title> ตัวอย่างการชำระเงิน wechat </title> <!-<link rel = "stylesheet" type = "text/css" href = "styles.css">-> </head> <body> <form action = "oauthservlet" method = "post"> หมายเลขคำสั่งซื้อ: <อินพุตประเภท = "text" name = "orderno"/> <อินพุต action = "scancodepayservlet? flag = createCode" method = "โพสต์"> หมายเลขคำสั่งซื้อ: <อินพุตประเภท = "ข้อความ" ชื่อ = "orderno"/> <อินพุตประเภท = "ส่ง" value = "สแกนรหัสที่จะจ่าย"/> </form>
2 เขียน servlet เพื่อรับรหัสผ่าน Oauth
แพ็คเกจ com.debug.weixin.servlet; นำเข้า java.io.ioException; นำเข้า java.io.printwriter; นำเข้า Javax.servlet.requestDispatcher; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า com.debug.weixin.util.Commonutil; นำเข้า com.debug.weixin.util.serverconfig; ระดับสาธารณะ Oauthservlet ขยาย httpservlet {โมฆะสาธารณะ doget (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {this.dopost (คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {string orderno = request.getParameter ("orderno"); // โทร weChat oauth2.0 เพื่อรับ OpenId String redirecturl = ServerConfig.serverDomain+"/basicweixin/payservletforh5? orderno ="+orderno; สตริง redirecturi = ""; ลอง {redirecturi = conmonutil.initopenid (redirecturl); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } //system.out.println(redirecturi); // requestDispatcher dis = request.getRequestDispatcher (redirecturi); //dis.foreward(Request, Response); Response.sendredirect (Redirecturi); - 3 หลังจากได้รับรหัสแล้วให้รับ OpenID ผ่าน Redirecturi และโทรหาอินเตอร์เฟสเดียวแบบครบวงจร
แพ็คเกจ com.debug.weixin.servlet; นำเข้า java.io.ioException; นำเข้า java.io.printwriter; นำเข้า java.util.sortedMap; นำเข้า java.util.treemap; นำเข้า Javax.servlet.requestDispatcher; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า com.debug.weixin.pojo.weixinoauth2token; นำเข้า com.debug.weixin.pojo.weixinqrcode; นำเข้า com.debug.weixin.util.advancedutil; นำเข้า com.debug.weixin.util.Commonutil; นำเข้า com.debug.weixin.util.configutil; นำเข้า com.debug.weixin.util.paycommonutil; ระดับสาธารณะ PayservletForh5 ขยาย Httpservlet {โมฆะสาธารณะ DoGet (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) โยน servletexception, ioexception {this.dopost (คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {string orderno = request.getParameter ("orderno"); String code = request.getParameter ("รหัส"); // รับ AccessToken Weixinoauth2Token Token = AdvancedUtil.getOauth2AccessToken (configutil.appid, configutil.app_secrect, รหัส); String openId = token.getOpenid (); // การเรียก WeChat Unified Payment Interface SortEdMap <Object, Object> พารามิเตอร์ = new Treemap <Object, Object> (); parameters.put ("appid", configutil.appid); parameters.put ("mch_id", configutil.mch_id); parameters.put ("device_info", "1,000"); parameters.put ("body", "คำสั่งทดสอบของฉัน"); parameters.put ("nonce_str", paycommonutil.createnoncestr ()); parameters.put ("out_trade_no", orderno); //parameters.put("total_fee ", string.valueof (รวม)); parameters.put ("total_fee", "1"); parameters.put ("spbill_create_ip", request.getRemoteaddr ()); parameters.put ("notify_url", configutil.notify_url); parameters.put ("trade_type", "jsapi"); parameters.put ("openId", openId); String sign = payCommonutil.Createsign ("UTF-8", พารามิเตอร์); parameters.put ("Sign", Sign); String requestxml = payCommonutil.getRequestxml (พารามิเตอร์); สตริงผลลัพธ์ = Commonutil.httpsrequestforstr (configutil.unified_order_url, "post", requestxml); System.out.println ("----------------------------------"); System.out.println (ผลลัพธ์); System.out.println ("----------------------------------"); request.setAttribute ("orderno", orderno); request.setAttribute ("TotalPrice", "0.01"); สตริง payjson = ""; ลอง {payjson = Commonutil.geth5paystr (ผลลัพธ์, คำขอ); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } //system.out.println(payjson); request.setAttribute ("UnifiedOrder", Payjson); RequestDispatcher dis = request.getRequestDispatcher ("h5pay.jsp"); dis.forward (คำขอ, การตอบกลับ); - การเรียก WeChat เพื่อรวมอินเทอร์เฟซเดียวต้องให้ความสนใจกับอัลกอริทึมลายเซ็น เฉพาะเมื่อการคำนวณลายเซ็นถูกต้องแล้วการชำระเงินจะเป็นไปอย่างราบรื่น
สตริงคงที่สาธารณะ geth5paystr (สตริงผลลัพธ์, คำขอ httpservletrequest) พ่นข้อยกเว้น {แผนที่ <สตริง, สตริง> map = xmlutil.doxmlparse (ผลลัพธ์); SortedMap <Object, Object> params = new Treemap <Object, Object> (); params.put ("appid", configutil.appid); params.put ("timestamp", long.toString (วันที่ใหม่ (). getTime ())); params.put ("noncestr", payCommonutil.createnonCestr ()); params.put ("แพ็คเกจ", "prepay_id ="+map.get ("prepay_id")); params.put ("signType", configutil.sign_type); สตริง paysign = payCommonutil.createsign ("UTF-8", params); params.put ("paysign", paysign); // กฎการสร้างของ Paysign สอดคล้องกับกฎการสร้างของ String Sign JSON = JSONObject.FromObject (params) .toString (); กลับ JSON; - 4 เขียนอินเทอร์เฟซการชำระเงินสุดท้ายเพื่อปรับการชำระเงิน WeChat H5
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerName ()+":"+request.getServerport ()+path+"/"; %> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>"> <title> wechat h5 การชำระเงิน </title> <script type = "text/javascript"> ฟังก์ชั่น jsapicall () {weixinjsbridge.invoke ('getBrandWcPayRequest', <%= (สตริง) คำขอ. getAttribute ("UnifiedOrder") //alert(res.err_code+res.err_desc+res.err_msg); } ฟังก์ชั่น callpay () {ถ้า (typeof weixinjsbridge == "undefined") {ถ้า (document.addeventListener) {document.addeventListener ('weixinjsbridgeready', jsapicall, false); } อื่นถ้า (document.attachevent) {document.attachevent ('weixinjsbridgeready', jsapicall); document.attachevent ('onweixinjsbridgeready', jsapicall); }} else {jsapicall (); }} </script> </head> <body> <input type = "button" value = "pay" onclick = "callpay ()"/> </body> </html> 5. การประมวลผลการแจ้งเตือนผลการชำระเงิน WeChat
แพ็คเกจ com.debug.weixin.servlet; นำเข้า Java.io.ByTeArrayOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า java.io.printwriter; นำเข้า java.util.map; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.jdom.jdomexception; นำเข้า com.debug.weixin.util.paycommonutil; นำเข้า com.debug.weixin.util.xmlutil; ระดับสาธารณะ PayHandLerservlet ขยาย HTTPSERVLET {โมฆะสาธารณะ DOGET (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น Servletexception, iOexception {this.dopost (คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {inputstream instream = request.getInputStream (); ByTeArrayOutputStream Outsteam = New ByteArrayOutputStream (); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024]; int len = 0; ในขณะที่ ((len = stream.read (บัฟเฟอร์))! = -1) {outsteam.write (บัฟเฟอร์, 0, len); } outsteam.close (); Instream.close (); สตริงผลลัพธ์ = สตริงใหม่ (outsteam.tobyTearray (), "UTF-8"); // รับข้อมูลการส่งคืนของ weChat เรียกแผนที่ NOTIFY_URL ของเรา <วัตถุ, วัตถุ> MAP = NULL; ลอง {map = xmlutil.doxmlparse (ผลลัพธ์); } catch (jdomexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } สำหรับ (Object KeyValue: map.keyset ()) {system.out.println (keyValue+"="+map.get (keyValue)); } if (map.get ("result_code"). toString (). equalsignorecase ("ความสำเร็จ")) {// การดำเนินธุรกิจในการสั่งซื้อ system.out.println ("--------------------------- ตกลง"); Response.getWriter (). เขียน (PayCommonutil.Setxml ("ความสำเร็จ", "")); // บอกเซิร์ฟเวอร์ WeChat ว่าฉันได้รับข้อความอย่าโทรหาการเรียกกลับ}}}} สำหรับรหัสข้างต้นหลายคนอ้างถึง http://blog.csdn.net/U011160656/article/details/41759195 ดังนั้นส่วนนี้ของรหัสจะไม่ถูกโพสต์ หากคุณต้องการคุณจะรู้ด้วยการอ่านบล็อกนี้
2. รหัสสแกน WeChat เพื่อจ่าย (โหมด 1)
ประเด็นสำคัญ: คุณต้องโทรไปที่ลิงค์ยาวไปยังอินเทอร์เฟซลิงค์สั้น ๆ และกำหนดค่ารหัสสแกนเพื่อจ่าย URL การโทรกลับอย่างถูกต้อง
1 สร้างรหัส QR การชำระเงิน WeChat ตามหมายเลขคำสั่งซื้อ
นี่คือวิธีการสร้างรหัส QR:
แพ็คเกจ com.debug.weixin.util; นำเข้า com.google.zxing.common.bitmatrix; นำเข้า Javax.imageio.imageio; นำเข้า Java.io.File; นำเข้า Java.io.OutputStream; นำเข้า java.io.ioException; นำเข้า java.awt.image.bufferedimage; ระดับสุดท้ายระดับสุดท้าย MATRIXTOIMAGEWRITER {ส่วนตัวคงที่ int int Black = 0xFF000000; private static final int white = 0xfffffff; Private Matrixtoimagewriter () {} public bufferedimage tobufferedImage (bitmatrix matrix) {int width = matrix.getWidth (); ความสูง int = matrix.getheight (); BufferedImage Image = New BufferedImage (ความกว้าง, ความสูง, bufferedImage.type_int_rgb); สำหรับ (int x = 0; x <width; x ++) {สำหรับ (int y = 0; y <ความสูง; y ++) {image.setrgb (x, y, matrix.get (x, y)? สีดำ: สีขาว); }} return image; } โมฆะสาธารณะคงที่ writeTofile (bitmatrix matrix, รูปแบบสตริง, ไฟล์ไฟล์) พ่น IOException {bufferedImage image = tobufferedImage (เมทริกซ์); if (! imageio.write (รูปภาพ, รูปแบบ, ไฟล์)) {โยน iOexception ใหม่ ("ไม่สามารถเขียนรูปภาพของรูปแบบ" + รูปแบบ + "ถึง" + ไฟล์); }} โมฆะสาธารณะคงที่ writeToStream (bitmatrix matrix, รูปแบบสตริง, outputstream สตรีม) พ่น IOException {bufferedImage image = tobufferedImage (เมทริกซ์); if (! imageio.write (รูปภาพ, รูปแบบ, สตรีม)) {โยน iOexception ใหม่ ("ไม่สามารถเขียนรูปภาพของรูปแบบ" + รูปแบบ); - นี่คือคลาสเครื่องมือและมีวิธีอื่นในการแสดงรหัส QR บนอินเทอร์เฟซ CreateQrCode ส่วนใหญ่ใช้บล็อกโค้ด:
โมฆะคงที่สาธารณะ createCodeStream (ข้อความสตริง, การตอบสนอง httpservletResponse) โยนข้อยกเว้น {// response.setContentType ("image/jpeg"); ServletOutputStream SOS = Response.getOutputStream (); ความกว้าง int = 500; ความสูง int = 500; // QR รหัสรูปแบบรูปแบบสตริงรูปแบบ = "jpg"; MultiformatWriter MultiformatWriter = new MultiformatWriter (); คำแนะนำแผนที่ = ใหม่ hashmap (); // คำแนะนำที่เข้ารหัส (encodeHintType.character_set, "UTF-8"); bitmatrix bitmatrix = multiformatwriter.encode (ข้อความ, barcodeformat.qr_code, ความกว้าง, ความสูง, คำแนะนำ); // สร้างรหัส QR matrixtoimagewriter.writeToStream (bitmatrix, รูปแบบ, SOS); sos.close (); - 2. ในการแปลงลิงก์ยาวเป็นลิงค์สั้น ๆ เพื่อสร้างรหัส QR ให้เขียนวิธีการชำระเงินการชำระเงินรหัสสแกนและเรียกอินเทอร์เฟซเดียวแบบรวม
แพ็คเกจ com.debug.weixin.servlet; นำเข้า Java.io.ByTeArrayOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า java.io.printwriter; นำเข้า java.util.date; นำเข้า java.util.map; นำเข้า java.util.sortedMap; นำเข้า java.util.treemap; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.jdom.jdomexception; นำเข้า com.debug.weixin.util.Commonutil; นำเข้า com.debug.weixin.util.configutil; นำเข้า com.debug.weixin.util.createqrcode; นำเข้า com.debug.weixin.util.paycommonutil; นำเข้า com.debug.weixin.util.xmlutil; นำเข้า com.mongodb.dbobject; ระดับสาธารณะ Scancodepayservlet ขยาย Httpservlet {โมฆะสาธารณะ DOGET (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) โยน servletexception, ioexception {this.dopost (คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {string flag = request.getParameter ("Flag"); if ("createCode" .equals (FLAG)) {createPayCode (คำขอ, การตอบกลับ); } else {ลอง {wxScanCoDeHandler (คำขอ, การตอบกลับ); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); }}} โมฆะสาธารณะ createPayCode (คำขอ httpservletRequest, การตอบกลับ httpservletResponse) {string orderno = request.getParameter ("orderno"); SortedMap <Object, Object> paras = new Treemap <Object, Object> (); paras.put ("appid", configutil.appid); paras.put ("mch_id", configutil.mch_id); paras.put ("time_stamp", long.tostring (วันที่ใหม่ (). getTime ())); paras.put ("nonce_str", paycommonutil.createnoncestr ()); paras.put ("product_id", orderno); // หมายเลขผลิตภัณฑ์จะต้องเป็นเครื่องหมายสตริงที่ไม่ซ้ำกัน = paycommonutil.createsign ("UTF-8", paras); paras.put ("Sign", Sign); string url = "weixin: // wxpay/bizpayurl? sign = sign & appid = appid & mch_id = mchid & product_id = productid & time_stamp = timestamp & nonce_str = nocestr"; String NativeUrl = url.replace ("sign", sign) .replace ("appid", configutil.appid) replace ("mchid", configutil.mch_id). replace ("productid", (สตริง) paras.get ("product_id")) แทนที่ ("timestamp" (สตริง) paras.get ("nonce_str")); SortedMap <Object, Object> พารามิเตอร์ = new Treemap <Object, Object> (); parameters.put ("appid", configutil.appid); parameters.put ("mch_id", configutil.mch_id); parameters.put ("nonce_str", paycommonutil.createnoncestr ()); parameters.put ("long_url", Commonutil.urlencodeUTF8 (NativeUrl)); String sign2 = payCommonutil.Createsign ("UTF-8", พารามิเตอร์); parameters.put ("sign", sign2); String requestxml = payCommonutil.getRequestxml (พารามิเตอร์); สตริงผลลัพธ์ = Commonutil.httpsRequestForstr (configutil.short_url, "post", requestxml); แผนที่ <สตริงสตริง> แผนที่ = null; ลอง {map = xmlutil.doxmlparse (ผลลัพธ์); } catch (jdomexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } string returnCode = map.get ("return_code"); String resultCode = map.get ("result_code"); if (returnCode.equalsignorecase ("ความสำเร็จ") && resultCode.equalsignorecase ("ความสำเร็จ")) {สตริง shorturl = map.get ("short_url"); // todo รับ shorturl เขียนรหัสเพื่อสร้างรหัส QR System.out.println ("shorturl ="+shorturl); ลอง {createqrcode.createCodeStream (shorturl, การตอบสนอง); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); }}} โมฆะสาธารณะ WxScanCoDeHandler (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) โยนข้อยกเว้น {inputstream instream = request.getInputStream (); ByTeArrayOutputStream Outsteam = New ByteArrayOutputStream (); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024]; int len = 0; ในขณะที่ ((len = stream.read (บัฟเฟอร์))! = -1) {outsteam.write (บัฟเฟอร์, 0, len); } outsteam.close (); Instream.close (); สตริงผลลัพธ์ = สตริงใหม่ (outsteam.tobyTearray (), "UTF-8"); // รับข้อมูลการส่งคืนของ weChat เรียกแผนที่ NOTIFY_URL ของเรา <วัตถุ, วัตถุ> MAP = NULL; ลอง {map = xmlutil.doxmlparse (ผลลัพธ์); } catch (jdomexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } สำหรับ (Object KeyValue: map.keyset ()) {system.out.println (keyValue+"="+map.get (keyValue)); } string orderno = map.get ("product_id"). toString (); // หลังจากได้รับพารามิเตอร์การร้องขอให้เรียกใช้อินเตอร์เฟสเดี่ยวแบบ Unified Interface SortEdMap <Object, Object> พารามิเตอร์ = new TreeMap <Object, Object> (); parameters.put ("appid", configutil.appid); parameters.put ("mch_id", configutil.mch_id); parameters.put ("device_info", "1,000"); parameters.put ("body", "รหัสทดสอบเพื่อชำระคำสั่งซื้อ"); parameters.put ("nonce_str", paycommonutil.createnoncestr ()); parameters.put ("out_trade_no", map.get ("product_id")); //parameters.put("total_fee ", string.valueof (TotalPrice)); parameters.put ("total_fee", "1"); parameters.put ("spbill_create_ip", request.getRemoteaddr ()); parameters.put ("notify_url", configutil.notify_url); parameters.put ("trade_type", "Native"); parameters.put ("openId", map.get ("openId")); String sign = payCommonutil.Createsign ("UTF-8", พารามิเตอร์); parameters.put ("Sign", Sign); String requestxml = payCommonutil.getRequestxml (พารามิเตอร์); String result2 = conmonutil.httpsrequestforstr (configutil.unified_order_url, "post", requestxml); System.out.println ("------------------------- 统一下单结果 -----------------------"); System.out.println (ผลลัพธ์ 2); แผนที่ <สตริงสตริง> mm = null; ลอง {mm = geth5paymap (result2, คำขอ); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } // string prepayId = getPrepayId (result2, คำขอ); // string returnNonestr = getReturnNoNEST (result2, คำขอ); String prepayId = mm.get ("prepay_id"); String returnNonestr = mm.get ("nonce_str") ;; SortedMap <Object, Object> LastSign = new Treemap <Object, Object> (); lastsign.put ("return_code", "ความสำเร็จ"); lastsign.put ("appid", configutil.appid); lastsign.put ("mch_id", configutil.mch_id); lastsign.put ("nonce_str", returnNonestr); lastsign.put ("prepay_id", prepayid); lastsign.put ("result_code", "ความสำเร็จ"); lastsign.put ("key", configutil.api_key); String LastSignPara = PayCommonutil.Createsign ("UTF-8", LastSign); StringBuffer buf = new StringBuffer (); buf.append ("<xml>"); buf.append ("<return_code> ความสำเร็จ </return_code>"); buf.append ("<appid>"+configutil.appid+"</appid>"); buf.append ("<mch_id>"+configutil.mch_id+"</mch_id>"); buf.append ("<mch_id>"+configutil.mch_id+"</mch_id>"); buf.append ("<nonce_str>"+returnNonestr+"</Nonce_str>"); buf.append ("<prepay_id>"+prepayid+"</prepay_id>"); buf.append ("<result_code> ความสำเร็จ </result_code>"); buf.append ("<mign>"+lastsignpara+"</sign>"); buf.append ("</xml>"); Response.getWriter (). พิมพ์ (buf.toString ()); } แผนที่สาธารณะ <สตริง, สตริง> geth5paymap (สตริงผลลัพธ์, คำขอ httpservletrequest) พ่นข้อยกเว้น {แผนที่ <สตริง, สตริง> map = xmlutil.doxmlparse (ผลลัพธ์); แผนที่กลับ; -สุดท้ายมาดูการกำหนดค่า WeChat สำหรับการชำระเงินบัญชีอย่างเป็นทางการและการชำระเงินรหัสสแกน:
ฉันหวังว่าในบทความนี้ทุกคนสามารถเข้าใจได้ว่าแม้ว่าคุณจะใช้ Java เพื่อสร้างบัญชีสาธารณะ WeChat และการชำระเงิน WeChat โดยไม่ต้องใช้รหัสโกงที่จัดทำโดย GitHub คุณสามารถพัฒนาแอปพลิเคชัน WeChat ที่ตอบสนองคุณและลูกค้าของคุณ แม้ว่าการสาธิตที่ได้รับจาก WeChat นั้นเป็น PHP ทั้งหมด แต่นี่คือเมฆทั้งหมด ภาษาการพัฒนาเป็นครั้งที่สองและการทำความเข้าใจเลเยอร์พื้นฐานที่การเรียกอินเทอร์เฟซต้องการเป็นเพียงหลักสูตรบังคับสำหรับโปรแกรมเมอร์