日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【微信开发】微信开发 之 开启开发模式

發布時間:2025/6/17 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【微信开发】微信开发 之 开启开发模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.

作者 : 萬境絕塵

轉載請注明出處 :?http://blog.csdn.net/shulianghan/article/details/20494177

.

GitHub源碼位置?:

--?HTTP?:?https://github.com/han1202012/WeChatVerify.git

--?SSH?:?git@github.com:han1202012/WeChatVerify.git


CSDN下載認證程序的war包和源碼?:?http://download.csdn.net/detail/han1202012/6999207


微信驗證war包下載?:?

--?訪問地址?:?ip地址:80/WeChatVerify/verifyServlet ;

--?Token?: 注意Token是 "hanshuliang" ;



一. 開啟開發模式解析



1. 開發者文檔


首先進入編輯模式, 將編輯模式關閉, 進入開發模式 :?



點擊查看文檔, 就可以打開微信的開發者文檔 : 路線 功能 -> 高級功能 -> 開發模式 -> 查看文檔 ;



開發者文檔目錄結構說明 :?

-- 新手接入 : 包括 接入指南 典型案例介紹 開發者規范, 講解如何接入開發者模;

-- 基礎支持 : 包括 獲取access_token 全局返回碼說明 接口頻率限制說明 上傳下載多媒體文件;

-- 接收消息 : 包括 驗證消息真實性 接收普通消息 接收事件推送 接收語音識別結果;

-- 發送消息 : 包括 發送被動響應消息 發送客服消息;

-- 用戶管理 : 包括 分組管理接口 獲取用戶基本信息 獲取關注者列表 獲取用戶地理位置 網頁授權用戶基本信息 網頁獲取用戶網絡狀態;

-- 自定義菜單 : 包括 自定義菜單創建接口 自定義菜單查詢接口 自定義菜單刪除接口 自定義菜單事件推送;

-- 推廣支持 : 包括 生成帶參數的二維碼 ;

-- 微信 JS接口 : 包括 隱藏微信中網頁右上角的按鈕 隱藏微信中網頁底部的導航欄 網頁獲取用戶網絡狀態;

-- 開發者交流互助 : 包括 開發者問答系統 接口調試工具 接口體驗測試號申請;



2. 開發者校驗流程解析


(1)申請消息接口


點擊開發模式 "成為開發者" 按鈕之后, 會彈出協議 :?



之后會彈出填寫 URL 和 Token :?

-- URL : 用來接收微信服務器數據的接口URL;

-- Token : 任意填寫, 用于生成簽名;



(2) 驗證URL有效性




校驗流程 : 程序必須能夠處理HTTP GET請求, 并對請求者身份進行校驗, 確保請求來自微信服務器;

-- 獲取參數 : HTTP GET 會攜帶四個參數 signature timestamp nonce echostr;

-- 拼裝參數 : 將排序后的三個參數按照字典順序排成字符串;

-- 加密參數 : 將排序后的字符串進行sha1加密;

-- 返回結果 : 將加密后的字符串 與 signature 參數對比, 如果相等則說明請求來自微信服務器, 原樣返回參數 echostr;



二. 開發校驗程序



1. 要點解析


(1) 在servlet中獲取四個參數


獲取方法 : 在doGet()方法中, 直接調用request的getParameter("signature")方法, 即可獲取signature參數;

-- 示例 :?

//獲取微信服務器發送給我們的四個參數String signature = req.getParameter("signature");String timestamp = req.getParameter("timestamp");String nonce = req.getParameter("nonce");String echostr = req.getParameter("echostr");

(2) 將參數按照字典順序排序


排序方法 : 數組工具類 Arrays.sort()會自動將數組中的字符串按照字典循序排序;

-- 代碼示例 :?

//將token timestamp nonce 按照字典順序排序String[] params = new String[]{token, timestamp, nonce};Arrays.sort(params);//將上面三個參數排序之后拼接成字符串StringBuffer buffer = new StringBuffer();for(int i = 0; i < params.length; i ++){buffer.append(params[i]);}

(3) sha1 加密


獲取MessageDigest加密類 : 通過調用 MessageDigest.getInstance("SHA-1"), 即可獲取sha1加密類;

-- 代碼示例 :?

//獲取sha1加密對象MessageDigest digest = MessageDigest.getInstance("SHA-1");//將組合后的字符串使用sha1加密, 加密后獲得一個byte數組byte[] byteDigest = digest.digest(buffer.toString().getBytes());

(4) byte數組轉為字符串



byte轉為char類型 :?

-- 示例代碼 :?

/** 將byte轉為字符串*/public static String byte2HexStr(byte b) {char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};char[] temp = new char[2];temp[0] = digit[(b >>> 4) & 0x0F];temp[1] = digit[b & 0x0F];String s = new String(temp);return s;}

byte數組轉為字符串 : 需要調用上面的類;

-- 示例代碼 :?

/** 將byte數組轉為字符串*/public static String byte2str(byte[] byteArray) {String str = "";for(int i = 0; i < byteArray.length; i ++){str += byte2HexStr(byteArray[i]);}return str;}

(5) 向微信服務器發送信息


發送信息 : 先獲取輸出流, 然后校驗, 如果通過校驗就向微信服務器發送信息;

-- 示例代碼 :?

//創建一個出處流, 用于向微信服務器發送數據PrintWriter out = resp.getWriter();//如果校驗通過, 向微信服務器發送echostr參數if(VerifyUtils.checkSignature(signature, timestamp, nonce)){out.print(echostr);}//釋放資源out.close();out = null;

.


2. 程序源碼


GitHub源碼位置 :

-- HTTP :?https://github.com/han1202012/WeChatVerify.git

-- SSH :?git@github.com:han1202012/WeChatVerify.git


CSDN下載認證程序的war包和源碼 :?http://download.csdn.net/detail/han1202012/6999207


微信驗證war包下載 :?

-- 訪問地址 :?ip地址:80/WeChatVerify/verifyServlet ;

-- Token : 注意Token是 "hanshuliang" ;


程序結構 :?



Servlet源碼 :?

package shuliang.han.vertify.servlet;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import shuliang.han.vertify.VerifyUtils;public class VerifyServlet extends HttpServlet {private static final long serialVersionUID = 4440739483644L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//獲取微信服務器發送給我們的四個參數String signature = req.getParameter("signature");String timestamp = req.getParameter("timestamp");String nonce = req.getParameter("nonce");String echostr = req.getParameter("echostr");//創建一個出處流, 用于向微信服務器發送數據PrintWriter out = resp.getWriter();//如果校驗通過, 向微信服務器發送echostr參數if(VerifyUtils.checkSignature(signature, timestamp, nonce)){out.print(echostr);}//釋放資源out.close();out = null;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//注意這里不能有任何操作, 否則不能完成驗證}}
驗證工具類源碼 :?

package shuliang.han.vertify;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays;public class VerifyUtils {private final static String token = "hanshuliang";public static boolean checkSignature(String signature, String timestamp, String nonce) {//將token timestamp nonce 按照字典順序排序String[] params = new String[]{token, timestamp, nonce};Arrays.sort(params);//將上面三個參數排序之后拼接成字符串StringBuffer buffer = new StringBuffer();for(int i = 0; i < params.length; i ++){buffer.append(params[i]);}//str用于存儲加密后的字符串String str = null;try {//獲取sha1加密對象MessageDigest digest = MessageDigest.getInstance("SHA-1");//將組合后的字符串使用sha1加密, 加密后獲得一個byte數組byte[] byteDigest = digest.digest(buffer.toString().getBytes());//獲取加密后的字符串, 將byte數組轉化為字符串str = byte2str(byteDigest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}/** 將加密后的字符串 與 signature 參數進行比較, * 如果加密后的字符串為null直接返回false* 如果加密后的字符串不為null, 直接返回*/boolean isVerified = (str != null) ? str.equals(signature.toUpperCase()) : false;return isVerified;}/** 將byte數組轉為字符串*/public static String byte2str(byte[] byteArray) {String str = "";for(int i = 0; i < byteArray.length; i ++){str += byte2HexStr(byteArray[i]);}return str;}/** 將byte轉為字符串*/public static String byte2HexStr(byte b) {char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};char[] temp = new char[2];temp[0] = digit[(b >>> 4) & 0x0F];temp[1] = digit[b & 0x0F];String s = new String(temp);return s;}}

web.xml配置文件 :?

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>verifyServlet</servlet-name><servlet-class>shuliang.han.vertify.servlet.VerifyServlet</servlet-class></servlet><servlet-mapping><servlet-name>verifyServlet</servlet-name><url-pattern>/verifyServlet</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list> </web-app>
?



三. 進行校驗



1.部署程序


(1) 導出war包







(2) 將war包上傳到服務器




(3) 配置Tomcat的server.xml文件


微信服務器只能接受80端口數據 :?

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />


2. 使用阿里云服務器



將上面的程序導出的war包, 放到阿里云Tomcat服務器下 : 使用 http://hanshuliang.com:8080/WeChatVerify/verifyServlet?登陸;

-- 結果 : 這是正常情況, 因為在POST中沒有添加參數;

HTTP Status 500 -


type?Exception report

message

description?The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerExceptionjava.lang.String.compareTo(String.java:1168)java.lang.String.compareTo(String.java:92)java.util.Arrays.mergeSort(Arrays.java:1144)java.util.Arrays.sort(Arrays.java:1079)shuliang.han.vertify.VerifyUtils.checkSignature(VerifyUtils.java:13)shuliang.han.vertify.servlet.VerifyServlet.doGet(VerifyServlet.java:28)javax.servlet.http.HttpServlet.service(HttpServlet.java:617)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note?The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.


Apache Tomcat/6.0.20



不支持8080端口, 只支持80端口, 我的服務器上跑著ngix服務器, 獨立域名博客在上面那 : 郁悶 ...




2. 開始校驗



原來的Ngix服務器中80端口是獨立域名博客, 現在講獨立域名博客指到 8086端口中 : 現在獨立域名博客可以從?http://hanshuliang.com:8086/?訪問;

將Tomcat設置成80端口, 氣死我了 ;



終于成功了 : 哭死了, 調試了好長時間啊, 終于通過了;



接口功能不全, 只有基礎接口的權限 ...

GitHub源碼位置?:

--?HTTP?:?https://github.com/han1202012/WeChatVerify.git

--?SSH?:?git@github.com:han1202012/WeChatVerify.git


CSDN下載認證程序的war包和源碼?:?http://download.csdn.net/detail/han1202012/6999207


微信驗證war包下載?:?

--?訪問地址?:?ip地址:80/WeChatVerify/verifyServlet ;

--?Token?: 注意Token是 "hanshuliang" ;



.

作者?:?萬境絕塵

轉載請注明出處?:?http://blog.csdn.net/shulianghan/article/details/20494177

.


總結

以上是生活随笔為你收集整理的【微信开发】微信开发 之 开启开发模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。