1. WeChat Applet <BR /> الخطوة 1: اتصل على wx.login للحصول على عنوان وثيقة الرمز الخطوة 2: تحديد ما إذا كان المستخدم يصرح بقراءة عنوان مستند معلومات المستخدم الخطوة 3: اتصل على wx.getuserinfo لقراءة عنوان مستند بيانات المستخدم الخطوة 4: لأن خلفية برنامج MINI ، لا يمكن أن يصرح اسم المجال Wechat فقط ، لا يمكننا الاتصال إلا بخادم WECHAT من خلال الخادم الخاص بنا. لذلك ، سوف نمرر EncryptedData و IV الذي تم الحصول عليه بواسطة Wx.login للحصول على رمز و wx.getuserinfo إلى الخلفية من خلال طلب wx.request
البيانات التي يتم إرجاعها بواسطة الخادم:
رمز البرنامج المصغر:
// استدعاء واجهة تسجيل الدخول للحصول على رمز wx.login ({success: function (res) {wx.getsetting ({success (setres) {// يحدد ما إذا كان مصرحًا إذا (! setres.authsetting ['' scope.userinfo ']) wx.getuserInfo ({lang: "zh_cn" ، النجاح: الوظيفة (userres) {// request network request wx.request ({url: config.loginwxurl ، data: {code: res.code ، isrepteddata: userres.encrypteddata ، iv: userres. "Application/X-WWW-urlencoded"} ، // احصل على معلومات المستخدم wx.getuserInfo ({lang: "ZH_CN" ، النجاح: الدالة (userres) {// stack network request wx.request ({url: config.loginwxurl ، data: {code: res.code ، encrypteddata: userres.encryptadada ، iv: userres} ، header: "نوع المحتوى": "Application) }}})}}) 2. خادم جافا
احصل على رمز معلومات المستخدم OpenId وفك تشفيره وفقًا للرمز
حزمة الجرة المطلوبة
<Rependency> <roupend> org.codehaus.xfire </rougiD> <intifactid> xfire-core </shintifactid> <sophy> 1.2.6 </splement
/ ** * احصل على معلومات Applet WeChat * Author Zhy */ Public Class WxAppleTuserInfo {private static logger log = logger.getLogger (wxappletuserinfo.class) ؛ /** * الحصول على wechat applet session_key و OpenId * * Author Zhy * param رمز تم إرجاعه بواسطة WeChat Login * @Return */public static jsonobject getSessionKeyoropenId (رمز السلسلة) {// wechat login code value string wxcode = code ؛ ResourceBundle Resource = ResourceBundle.getBundle ("Weixin") ؛ // اقرأ requesturl strequsturl = resource.getString ("url") ؛ // طلب عنوان https://api.weixin.qq.com/sns/jscode2session خريطة <string ، string> requesturlparam = new hashmap <string ، string> () ؛ requesturlparam.put ("appid" ، resource.getString ("appid")) ؛ // appid في إعدادات المطور requesturlparam.put ("secret" ، Resource.getString ("AppSecret")) ؛ // appsecret requesturlparam.put ("js_code" ، wxcode) ؛ . // المعلمات الافتراضية // إرسال طلب نشر للقراءة والاتصال بـ wechat https://api.weixin.qq.com/sns/jscode2session واجهة للحصول على معرف مستخدم مفتوح jsonobject jsonobject = json.parsebject (urlutil.sendpost (requesturl ، requesturlparam) ؛ إرجاع jsonobject ؛ ) IV) {// البيانات المشفرة بايت [] databyte = base64.decode (EncryptedData) ؛ // مفتاح المشفر بايت [] keybyte = base64.decode (SessionKey) ؛ // Offset Byte [] ivbyte = base64.decode (IV) ؛ جرب {// إذا كان المفتاح أقل من 16 بت ، ثم يعوض عن ذلك. المحتوى في هذا إذا كان قاعدة int مهمة للغاية = 16 ؛ if (keybyte.length ٪ base! = 0) {int groups = keybyte.length / base + (keybyte.length ٪ base! = 0؟ 1: 0) ؛ بايت [] temp = new byte [مجموعات * قاعدة] ؛ Arrays.fill (temp ، (byte) 0) ؛ System.arrayCopy (keybyte ، 0 ، temp ، 0 ، keybyte.length) ؛ keybyte = temp ؛ } // تهيئة Security.addprovider (New BouncycastleProvider ()) ؛ cipher cipher = cipher.getInstance ("AES/CBC/PKCS7Padding" ، "BC") ؛ secretKeySpec spec = new SecretKeySpec (keybyte ، "aes") ؛ خوارثماراميرامترات المعلمات = الخوارزميات. المعلمات. cipher.init (cipher.decrypt_mode ، spec ، المعلمات) ؛ // تهيئة byte [] resultByte = cipher.dofinal (databyte) ؛ if (null! = resultbyte && resultbyte.length> 0) {String result = new String (resultByte ، "UTF-8") ؛ إرجاع json.parseObject (نتيجة) ؛ }} catch (nosuchalgorithmexception e) {log.error (e.getMessage () ، e) ؛ } catch (nosuchpaddingexception e) {log.error (e.getMessage () ، e) ؛ } catch (invalidParametSpecexception e) {log.error (e.getMessage () ، e) ؛ } catch (incholicalBlockSeizeException e) {log.error (e.getMessage () ، e) ؛ } catch (badpaddingexception e) {log.error (e.getMessage () ، e) ؛ } catch (UnsupportedEncodingException e) {log.error (e.getMessage () ، e) ؛ } catch (UnsupportedEncodingException e) {log.error (e.getMessage () ، e) ؛ } catch (invalidKeyException e) {log.error (e.getMessage () ، e) ؛ } catch (invalidalgorithmparameterexception e) {log.error (e.getMessage () ، e) ؛ } catch (nosuchproviderexception e) {log.error (e.getMessage () ، e) ؛ } إرجاع فارغ ؛ }} رمز لإرسال الطلب
/ *** أرسل طلبًا إلى عنوان URL المحدد لأسلوب النشر** param url عنوان URL لإرسال الطلب* param param request معلمة* @إعادة استجابة المورد عن بُعد الممثل بواسطة الاسم*/ uBLIC Static String SendPost (url url ، map <string ،؟> parammap) {printWriter out = null ؛ BufferedReader في = فارغة ؛ نتيجة السلسلة = "" ؛ سلسلة param = "" ؛ iterator <string> it = parammap.keyset (). iterator () ؛ بينما (it.hasnext ()) {string key = it.next () ؛ param + = key + "=" + parammap.get (key) + "&" ؛ } جرب {url realurl = url new (url) ؛ // افتح الاتصال بين urlconnection conn = alwurl.openconnection () ؛ // قم بتعيين سمة الطلب العام conn.setRequestProperty ("قبول" ، "*/*") ؛ Conn.SetRequestProperty ("connection" ، "keep-alive") ؛ Conn.SetRequestProperty ("قبول-charset" ، "UTF-8") ؛ Conn.SetRequestProperty ("Asser-Agent" ، "Mozilla/4.0 (متوافق ؛ MSIE 6.0 ؛ Windows NT 5.1 ؛ SV1)") ؛ // لإرسال طلب منشور ، يجب عليك تعيين السطرين التاليين conn.setDooutput (true) ؛ conn.setDoInput (صواب) ؛ // احصل على دفق الإخراج المقابل لكائن urlConnection Out = new printWriter (conn.getOutputStream ()) ؛ // إرسال المعلمة request Out.print (param) ؛ // التخزين المؤقت Out.flush () من دفق الإخراج Flush ؛ . خط السلسلة بينما ((line = in.readline ())! = null) {result += line ؛ }} catch (استثناء e) {log.error (e.getMessage () ، e) ؛ } // استخدم الكتل أخيرًا لإغلاق دفق الإخراج ودفق الإدخال أخيرًا {try {if (out! = null) {out.close () ؛ } if (in! = null) {in.close () ؛ }} catch (ioException ex) {ex.printStackTrace () ؛ }} نتيجة الإرجاع ؛ }ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.