โดยไม่ต้องกังวลใจเพิ่มเติมเพียงแค่ดูรหัส
requesthandler requesthandler = new RequestHandler (super.getRequest (), super.getResponse ()); // รับโทเค็น // ถูกต้องภายในสองชั่วโมงและรับโทเค็นอีกครั้งหลังจากสองชั่วโมง = requesthandler.getToken (); // อัปเดตโทเค็นไปยังแอปพลิเคชัน quorkhandler.getTokenReal (); System.out.println ("WeChat Pay Get Token ==============================:" +โทเค็น); // requesthandler เริ่มต้น requesthandler.init (); quorkhandler.init (appid, appsecret, appkey, partnerkey, key); รหัส: ระบบท้องถิ่นสร้างคำสั่งซื้อ
// ตั้งค่าพารามิเตอร์ลำดับแพ็คเกจเรียงลำดับ MAP <String, String> PackageParams = ใหม่ treemap <string, string> (); PackageParams.put ("bank_type", "wx"); // ประเภทการชำระเงิน packageParams.put ("body", "xxxx"); // คำอธิบายผลิตภัณฑ์ PackageParams.put ("FEE_TYPE", "1"); // Bank Currency PackageParams.put ("input_charset", "UTF-8"); // ตัวอักษร Set PackageParams.put ("notify_url", "http://xxxx.com/xxxx/wxcallback"); // ที่อยู่การแจ้งเตือนที่นี่ได้รับการทดสอบโดยใช้ที่อยู่เครือข่ายภายนอกและให้ความสนใจว่าพอร์ต 80 เปิดอยู่หรือไม่ PackageParams.put ("out_trade_no", ไม่); // หมายเลขคำสั่งซื้อของผู้ค้า packageParams.put ("พันธมิตร", Partnerrid); // ตั้งค่าหมายเลขผู้ค้า packageParams.put ("spbill_create_ip", super.getRequest (). getRemoteHost ()); // เครื่อง IP ที่สร้างขึ้นโดยคำสั่งซื้อหมายถึงเบราว์เซอร์ของผู้ใช้ IP packageParams.put ("total_fee", string.valueof (rstotal)); // จำนวนเงินทั้งหมดของผลิตภัณฑ์แบ่งออกเป็นหน่วย // ตั้งค่าพารามิเตอร์การชำระเงิน SortedMap <สตริงสตริง> signParams = ใหม่ treemap <สตริงสตริง> (); signParams.put ("appid", appid); signParams.put ("noncestr", noncestr); signParams.put ("traceid", propertiesutils.getOrderNo ()); SignParams.put ("การประทับเวลา", การประทับเวลา); signParams.put ("แพ็คเกจ", packageValue); signParams.put ("appkey", this.Appkey); // ในการสร้างลายเซ็นการชำระเงินค่าดั้งเดิมของ urlencoder จะต้องใช้สำหรับอัลกอริทึม SHA1! String sign = ""; ลอง {sign = sha1util.createsha1sign (signparams); } catch (exception e) {e.printstacktrace (); } // เพิ่มพารามิเตอร์เพิ่มเติมสำหรับลายเซ็นที่ไม่ได้มีส่วนร่วมในการลงชื่อเข้าใช้ params.put ("sign_method", "sha1"); signParams.put ("app_signature", ลงชื่อ); // แพ็คเกจการชำระเงิน API สิ้นสุดลง ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- รหัส: สร้างคำสั่งซื้อล่วงหน้าล่วงหน้าเสร็จสมบูรณ์
// สร้างคำสั่งซื้อล่วงหน้าล่วงหน้าเพื่อให้เสร็จสมบูรณ์กลับไปที่ Android, iOS และวางพารามิเตอร์ที่ต้องการสำหรับ WeChat SortedMap <String, String> PayParams = new Treemap <String, String> (); payparams.put ("appid", appid); payparams.put ("noncestr", noncestr); payparams.put ("แพ็คเกจ", "sign = wxPay"); payparams.put ("PartnerId", Partnerrid); payparams.put ("prepayid" เตรียม); payparams.put ("appkey", this.Appkey); // ความแตกต่างที่นี่คือ 1,000 เนื่องจากขีดจำกัดความยาวของพารามิเตอร์ เวลา int = (int) (system.currentTimeMillis () / 1000); payparams.put ("timestamp", string.valueof (เวลา)); System.out.println ("การประทับเวลา:" + เวลา); // ลายเซ็นสตริง paysign = ""; ลอง {paysign = sha1util.createsha1sign (payparams); } catch (exception e) {e.printstacktrace (); } payparams.put ("sign", paysign); // ข้อมูล Spoof JSON ถูกส่งกลับไปยังไคลเอนต์ BasicDBObject backObject = ใหม่ BasicDBObject (); backobject.put ("appid", appid); backobject.put ("noncestr", payparams.get ("noncestres")); backobject.put ("แพ็คเกจ", "sign = wxPay"); backobject.put ("PartnerId", payparams.get ("PartnerId")); backobject.put ("prepayid", payparams.get ("prepayid")); backObject.put ("appkey", this.Appkey); backobject.put ("timestamp", payparams.get ("timestamp")); backobject.put ("Sign", payparams.get ("Sign")); String backstr = dataObject.toString (); System.out.println ("backstr:" + backstr); กลับ backstr; จนถึงตอนนี้คำสั่งซื้อล่วงหน้าได้ถูกสร้างขึ้นและถูกส่งกลับไปยังไคลเอนต์รอให้เซิร์ฟเวอร์ WeChat แจ้งเตือน ที่อยู่ของการแจ้งเตือนคือ NOTEFY_URL ที่สร้างคำสั่งซื้อล่วงหน้า
ResponseHandler reshandler = new ResponseHandler (คำขอ, การตอบกลับ); reshandler.setKey (PartnerKey); // สร้างวัตถุคำขอ // requesthandler queryReq = new RequestHandler (คำขอ, การตอบกลับ); //queryreq.init (); if (reshandler.istenpaysign () == true) {// สตริงหมายเลขคำสั่งซื้อของผู้ค้า out_trade_no = reshandler.getParameter ("out_trade_no"); System.out.println ("out_trade_no:" + out_trade_no); // tenpay หมายเลขคำสั่งซื้อสตริง transaction_id = reshandler.getParameter ("transaction_id"); System.out.println ("transaction_id:" + transaction_id); // จำนวนในหน่วยของการแบ่งสตริง total_fee = reshandler.getParameter ("total_fee"); // หากใช้คูปองส่วนลดส่วนลดจะมีค่า, total_fee+ส่วนลด = ส่วนลดสตริง Total_fee ที่ร้องขอเดิม = reshandler.getParameter ("ส่วนลด"); // ผลการชำระเงินสตริง trade_state = reshandler.getParameter ("trade_state"); // ผู้ตัดสินลายเซ็นและผลลัพธ์ถ้า ("0" .Equals (Trade_state)) { - - // ส่งข้อความที่ประสบความสำเร็จไปยังระบบ Tenpay ระบบ Tenpay จะไม่ให้การแจ้งเตือนที่ตามมาอีกต่อไปหลังจากได้รับผลลัพธ์นี้ reshandler.sendtocft ("ความสำเร็จ"); // ส่งคืนความสำเร็จไปยังเซิร์ฟเวอร์ WeChat มิฉะนั้นการแจ้งเตือน 8 ครั้งใน 30 นาทีกลับ "ความสำเร็จ"; } else {system.out.println ("แจ้งการตรวจสอบลายเซ็นล้มเหลว"); reshandler.sendtocft ("ล้มเหลว"); Response.Setcharacterencoding ("UTF-8"); }} else {system.out.println ("ล้มเหลว -md5 ล้มเหลว"); -ข้างต้นคือรหัสที่ Java ใช้เซิร์ฟเวอร์การชำระเงิน WeChat ฉันหวังว่าทุกคนจะศึกษาอย่างรอบคอบเพื่อตระหนักถึงการชำระเงิน WeChat