用Java實現成爲微信開發者
1、微信開發的數據交互方式
公衆平臺消息接口爲開發者提供了與用戶進行消息交互的能力。對於成功接入消息接口的公衆賬號,當用戶發消息給公衆賬號時,微信公衆平臺服務器會使用HTTP請求對接入的網址進行消息推送,第三方服務器可通過響應包返回個性的回覆,從而達到回覆消息的目的。簡單地說,就是公衆賬號可以使用自己的程序來和用戶對話。(摘自http://book.2cto.com/201309/33610.html)
2、微信開發者的服務支持
由以上數據交互方式開出看出,必須有 微信公衆平臺、第三方服務器
3、成爲微信開發者
成爲微信開發者要通過修改配置,即填寫URL、token、和生成EncodingAESKey
認證有servlet完成,代碼要有一下代碼文件
//weixinServlet.java第三方服務器的入口
public class weixinServlet extends HttpServlet{
private static final long serialVersionUID = 4440739483644821986L;
/**
* 確認請求來自微信服務器
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 微信加密簽名
String signature = request.getParameter("signature");
// 時間戳
String timestamp = request.getParameter("timestamp");
// 隨機數
String nonce = request.getParameter("nonce");
// 隨機字符串
String echostr = request.getParameter("echostr");
PrintWriter out = response.getWriter();
// 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
}
out.close();
out = null;
}
}
//SignUtil.java簽名校驗文件在servlet文件中調用
public class SignUtil {
// 與接口配置信息中的Token要一致
private static String token ="jdl";
/**
* 驗證簽名
* @param signature
* @param timestamp
* @param nonce
* @return
*/
public static boolean checkSignature(String signature, String timestamp,
String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
// 將token、timestamp、nonce三個參數進行字典序排序
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
MessageDigest md = null;
String tmpStr = null;
try {
md = MessageDigest.getInstance("SHA-1");
// 將三個參數字符串拼接成一個字符串進行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
content = null;
// 將sha1加密後的字符串可與signature對比,標識該請求來源於微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}
/**
* 將字節數組轉換爲十六進制字符串
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 將字節轉換爲十六進制字符串
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; // 取一個字節的高4位,然後獲得其對應的十六進制字符
tempArr[1] = Digit[mByte & 0X0F];// 取一個字節的低4位,然後獲得其對應的十六進制字符
String s = new String(tempArr);
return s;
}
}
//配置web.xml文件的servlet
<servlet>
<servlet-name>weixinServlet</servlet-name>
<servlet-class>com.yc.servlets.weixinServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>weixinServlet</servlet-name>
<url-pattern>/weixinServlet</url-pattern>
</servlet-mapping>
做到這裏,準備工作已經完成以下的步奏我只是提示一下
1、在新浪雲上發佈你的項目
2、將token、URL填寫,生成EncodingAESKey
3、選擇明文模式
4、提交
注意:URL是項目的URL+/weixinServlet
微信開發入門1--成爲開發者
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
CSS僞類、僞元素選擇器
微风不燥
2020-07-02 17:49:41
高速FPGA系統的信號完整性測試和分析
达则兼济天下SEU
2020-02-23 19:24:03
差分線傳輸的兩臺設備需要共地嗎?
达则兼济天下SEU
2020-02-23 19:24:03
ARM7、ARM9、ARM11、ARM-Cortex的關係
达则兼济天下SEU
2020-02-23 19:24:03
信號反射的幾個重要體現(過沖、下衝、振鈴)及電路設計
达则兼济天下SEU
2020-02-23 19:24:03
js的while與do while循環
微风不燥
2020-02-22 06:19:21