في الآونة الأخيرة ، تم استكشاف تطوير حساب WeChat العام لبضعة أيام لأنه تم القيام به لأول مرة ، وقد وصلت فقط إلى مستوى التنفيذ
إن الدفع الإجمالي لحساب WeChat العام بسيط للغاية في الواقع ، ويتم تقسيمه تقريبًا إلى ثلاث خطوات. يجب الحصول على الخطوة الأولى عن طريق ترخيص المستخدم ؛ فيما يلي يقدم عملية تطوير كل خطوة.
بادئ ذي بدء ، من الضروري توضيح أن دفعة حساب WeChat العامة هي دفعة إصدار ويب ، لذلك من الضروري ترخيص WeChat خطوة واحدة أكثر من تطبيق WeChat الذي تم استرداده مباشرة. أي أنك تحتاج إلى الحصول على OpenID للمستخدم. نوع المعاملة المستخدمة من قبل حساب WeChat العام هو JSAPI ، وبالتالي فإن وثيقة واجهة الطلب الموحدة مكتوبة بوضوح إلى
لذلك ، يجب أن نكون مفتوحين ، وفي نفس الوقت يمكننا التعامل مع بعض المنطق الذي نحتاجه. هناك طريقتان للحصول على ترخيص المستخدم:
النطاق هو snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize؟appid=wx520c15f417810387&rdirect_uri=http٪2fchong.qquc.com٪2fphphph p 26bay العنوان ٪ 3d1 ٪ 26vb2ctag ٪ 3d4_2030_5_1194_60 & reponse_type = الكود والنطاق = snsapi_base & state = 123#wechat_redirect
النطاق هو SNSAPI_USERINFO
https://open.weixin.qq.com/connect/oauth2/authorize؟appid=wxf0e81c3bee62d60&redirect_uri=http٪ 3a ٪ 2f 2fnba.bluewebgame.com ٪ 2foauth الدولة#wechat_redirect
يحتوي وثيقة WeChat الرسمية أيضًا على شرح مفصل لكل معلمة ، وسأشرح بعناية المعلمات الرئيسية. بادئ ذي بدء ، فإن AppID ليس كثيرًا ليقول إن APPID من حساب WeChat الخاص بك ثابت حتى الموت. يمكنك خياطة المعلمات التي تحتاجها على هذا الرابط. يمكن فهم معلمات الحالة على أنها الحقول الممتدة. فيما يلي مقطع رمز OpenId.
// الحصول على httpclientutil util = httpclientutil.getInstance () ؛ ، wxpayconfig.appsecret) ؛ /sns/oauth2/access_token "، null ، map) ؛ logger.info (" returnstr: [" + returnstr +"] ") ؛ accessStoken at = json.parseObject (returnstr ، acctstoken.c lass) ؛AccessToken.java
acctstokn إرجاع Expires_in ؛} public void setexpires_in (string expires_in) {this.expires_in = expires_in ؛ OpenId ؛} public void setOpenId (سلسلة OpenId) {this.openId = openId ؛} السلسلة العامة e () {Return Scope ؛} public void setScope (Scope) {this.scope = scope ؛} السلسلة العامة getUnionId () {return UnionId ؛} public void setunionid (string unionid) {this.unionid = unionId ؛ OpenId = " + OpenId +" ، Scope = " + Scope +" ، UnionId = " + UnionId +"] "]"] ""ثانياً ، بعد أن حصلنا على OpenID ، يمكننا تنفيذ الموضع الموحد التالي للأوامر. وثيقة الواجهة الفردية على WeChat أكثر تفصيلًا ، ولن أقدم معنى المعلمة المحددة. يتم نشر الرمز الأكثر بديهية أدناه ، خاصة التذكير بأنه يجب عليك الانتباه إلى التوقيع الصحيح. المفتاح المستخدم في التوقيع ليس AppSecret ولكن مفتاح التاجر الذي حددته عند التقديم.
// ترتيب بيانات WXPaySenddat ؛ IP) ؛ الاسم المستعار ("XML" ، wxpayreturndata.class) ؛Unifiedorderservice.java
public unideorservice {private final static logger = loggerfactory.getLogger (unifyOrnderservice.class) ؛ الكائن ، المعلمات = TREEMAP جديد ، الكائن> () ؛ ؛ .getout_trade_no ()) ؛ "، data.getopenid ()) ؛ parameters.put (" device_info "، d ata.getDevice_Info ()) ؛ logger.info (" sign: "+wxsign.createsign (المعلمات ، المفتاح))) ؛ XmlfriendlyCoder ("- _" ، "_") ؛ XML) ؛ " + returnxml) ؛} catch (استثناء E) {E.PrintStackTrace () ؛} returnxml ؛}}}}}}}}}wxsign
الفئة العامة wxsign {private static string charactering = "utf-8" ؛ يتم فرز المعلمات. It Next () ؛ {sb.append (k + "=" + v + "&") ؛} sb.append ("key =" key) ؛ ) ؛ {return string.valueof (System.CurrentTimeMillis () / 1000) ؛}}آخر شيء نذكره هو عنوان رد الاتصال على Notify_url لتلقي WeChat Payment Advance Operback Oupbroad.
لقد حصلنا على تحضير معاملة ما قبل الدفع ، حتى نتمكن من إجراء عملية الخطوة الأخيرة. استخدم H5 لضبط واجهة برمجة تطبيقات الدفع.
// H5 Up Payment Attr.Addattribute ("AppId" ، Redata.getAppid ()) ؛ ) ؛ ؛ )) ؛ "، wxsign.createsign (signmap ، wxpayconfig.key)) ؛بعد تمرير المعلمات المطلوبة إلى الصفحة ، استخدم WeChat لتوفير طريقة لإعداد الدفع.
<script> وظيفة geturlparam (name) {// إنشاء كائن تعبير منتظم يحتوي على معلمات الهدف var reg = new regexp ("(^| &)" + name + "= ([^&]*) (& | $)) ") NULL ؛} inbridgeready () "SignType") ؛ Timestamp ، // "1395712654" ، // Timelia ، الرقم الثاني من الثواني منذ عام 1970 "noncestr": noncestr ، // "e61463f8efa94090b1f366ccfbb444" ، // string random "ge ، //" ge ، ": signtype ، //" md5 "، // wechat method method:" paysign ": paysign ، //" 70EA570631E4BB79628FBCA905343FFADD89 " مرة أخرى ، يذكر فريق WeChat رسميًا: سيعود Res.ERR_MSG إلى OK بعد أن يدفع المستخدم بنجاح ، لكنه لا يضمن أن يكون موثوقًا به. get_brand_wcpay_request: إلغاء ") {Alert (" إلغاء المعاملات ") ؛} if (res.err_msg ==" get_wcpay_request: fail ") lert (" فشل الدفع ") ؛}) ؛ == "Underfired") {if (document.addeventristener) {document.addeventListener ('wei xinjsbridgeready' ، onbridgeready ، false) ؛} if (document .atachevent) ancankevent ('onweixinjsbridgeready' ، onbridgeready) ؛}} ell {onBridgeready () ؛}} </script>يمكنك تخصيص صفحة الإرجاع الخاصة بك حيث تقوم بإرجاع النتيجة.
الملخص: نظرًا لأني أيضًا ، يمكن أن يكون لدى كتابة هذه المقالة نتائج عملي ، ويمكن أن يحصل الأصدقاء الذين يشاركون مع المبتدئين على بعض المساعدة تقدم.
ما سبق هو جميع محتويات تطوير جافا للدفع العام.