1. سحب Access_Token
2. اسحب معلومات المستخدم
3. دفع الرسائل بنشاط
4. يبدو أن الواجهة تتطلب الإذن
5. الاعتماد على httpclient4.2.3 وجاكسون 2.2.1
نسخة الكود كما يلي:
الطبقة العامة weixinapihelper {
/**
* احصل على الواجهة الرمزية
*/
سلسلة خاصة getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token؟grant_type=client_credential&appid= {0 )&Secret= {1}" ؛
/**
* سحب واجهة معلومات مستخدم WeChat
*/
سلسلة خاصة getUserInfourl = "https://api.weixin.qq.com/cgi-bin/user/info؟access_token= {0 )&openid= {1}" ؛
/**
* واجهة معلومات الدفع النشطة
*/
سلسلة خاصة sendmsgurl = "https://api.weixin.qq.com/cgi-bin/message/send؟access_token= {0}" ؛
خاص httpclient webclient ؛
سجل السجل الخاص = logfactory.getLog (getClass ()) ؛
public void initWebClient (سلسلة proxyhost ، int proxyport) {
this.initWebClient () ؛
if (webclient! = null &&! stringUtils.isempty (proxyhost)) {
httphost proxy = new httphost (proxyhost ، proxyport) ؛
webclient.getParams ().
}
}
/**
* desc تهيئة إنشاء webclient
*/
public void initWebClient () {
log.info ("initWebClient start ....") ؛
يحاول {
poolingClientConnectionManager tcm = new PoolingClientConnectionManager () ؛
tcm.setMaxTotal (10) ؛
sslContext ctx = sslContext.getInstance ("tls") ؛
X509TRUSTMANAGER TM = جديد X509TRUSTMANAGER () {
public checkClientTrusted (x509certificate [] arg0 ، string arg1) يلقي الشهادة {
}
void public checkservertrusted (x509certificate [] arg0 ، string arg1) رمي الشهادة {
}
X509Certificate [] getAcceptedissuers () {
العودة لاغية.
}
} ؛
ctx.init (null ، x509trustmanager [] {tm} ، null) ؛
sslsocketfactory ssf = sslsocketfactory جديد (ctx ، sslsocketfactory.allow_all_hostname_verifier) ؛
Scheme SCH = مخطط جديد ("HTTPS" ، 443 ، SSF) ؛
tcm.getSchemeregistry (). التسجيل (SCH) ؛
WebClient = new DefaulthTtpClient (TCM) ؛
} catch (استثناء ex) {
log.error ("initWebClient استثناء" ، ex) ؛
} أخيراً {
log.info ("initWebClient End ...") ؛
}
}
/**
* @DESC احصل على رمز معتمد
* param appid
* @Param Secret
* @يعود
*/
السلسلة العامة getAccessToken (سلسلة AppId ، String Secret) {
سلسلة AccessToken = null ؛
يحاول {
log.info ("getAccessToken start. {appid =" + appid + "، secret:" + secret + "}") ؛
url url = messageformat.format (this.getTokenurl ، appid ، secret) ؛
سلسلة استجابة = executeHttpget (url) ؛
AccessToken = jsonutils.read (استجابة ، "Access_Token") ؛
} catch (استثناء e) {
log.error ("الحصول على استثناء Toekn" ، e) ؛
}
إرجاع AccessToken ؛
}
/**
* @DESC اضغط على المعلومات
* param الرمز المميز
* param msg
* @يعود
*/
السلسلة العامة sendMessage (سلسلة الرمز المميز ، سلسلة MSG) {
يحاول{
log.info ("sendMessage start.token:"+token+"، msg:"+msg) ؛
String url = messageformat.format (this.sendmsgurl ، token) ؛
httppost post = new httppost (url) ؛
ResponseHandler <؟> reviewHandler = new BasicResponseHandler () ؛
كيان صارم = صارم جديد (MSG) ؛
post.setentity (الكيان) ؛
string response = (string) this.webclient.execute (post ، reponseHandler) ؛
log.info ("return response ====== START =====================) ؛
log.info (استجابة) ؛
log.info ("return response ====== end ======================) ؛
استجابة العودة ؛
} catch (استثناء e) {
log.error ("الحصول على استثناء معلومات المستخدم" ، e) ؛
العودة لاغية.
}
}
/**
* desc سحب معلومات المستخدم
* param الرمز المميز
* param openid
* @يعود
*/
Weixinopenuser العام getUserInfo (سلسلة الرمز المميز ، سلسلة OpenId) {
يحاول {
log.info ("getUserInfo start. {token:" + token + "، openId:" + openId + "}") ؛
url url = messageformat.format (this.getuserInfourl ، token ، openId) ؛
سلسلة استجابة = executeHttpget (url) ؛
jsonnode json = jsonutils.read (response) ؛
if (json.get ("OpenId")! = null) {
مستخدم Weixinopenuser = جديد Weixinopenuser () ؛
user.setOpenUserId (json.get ("OpenId"). ASTEXT ()) ؛
user.setState (json.get ("اشتراك"). astext ()) ؛
if ("1" .equals (user.getState ())) {
user.setUserName (json.get ("lamname"). astext ()) ؛
user.setSex (json.get ("sex"). astext ()) ؛
user.setCity (json.get ("City"). ASTEXT ()) ؛
user.setLanguage (json.get ("language"). astext ()) ؛
}
إرجاع المستخدم ؛
}
} catch (استثناء e) {
log.error ("الحصول على استثناء معلومات المستخدم" ، e) ؛
}
العودة لاغية.
}
/**
* @DESC يبدأ http الحصول على طلب لإرجاع البيانات
* param url
* @يعود
* throws ioException
* Throws ClientProtocolexception
*/
سلسلة خاصة executehttpget (url string) يلقي ioException ، clientprotocolexception {
ResponseHandler <؟> reviewHandler = new BasicResponseHandler () ؛
string response = (string) this.webclient.execute (httpget جديد (url) ، desponseHandler) ؛
log.info ("return response ====== START =====================) ؛
log.info (استجابة) ؛
log.info ("return response ====== end ======================) ؛
استجابة العودة ؛
}
}