準備工做1 域名準備javascript
不管是我的開發仍是作公司項目域名都是必不可少的html
前期我我的用過花生殼作個開發測試,挺好用的,就是如今要收費了,開通花生殼要收費,開通內網穿透要收費(爲啥要內網穿透呢,由於微信接入的接口必須使用80端口,而若是 要想讓本身pc的80端口對外映射就要作這個內網穿透)java
開發公司項目的須要提早準備好服務器和域名(爲啥提早申請呢,域名備案也是個有點麻煩的事情,須要各類公司法人證件,順利的話辦理週期1-2周)node
準備工做2 公衆號申請和配置服務器
公衆號分三種:訂閱號(天天發文章)、服務號(功能更豐富)、企業號(俺也沒用過)微信
公衆號申請也是須要公司各類材料,而且申請完了須要認證才能夠作自定義開發,而後認證費300大洋微信開發
固然我的作測試的話,只須要去申請一個測試號就好了,基本的開發功能也都有,so easy微信公衆平臺
而後是配置dom
進入微信公衆平臺,選擇 開發-基本配置async
開發者ID、開發者密碼:系統給自動分配的,尤爲是開發者密碼須要本身保存(不然就要進行重置)
IP白名單:沒有加入IP白名單的IP地址是沒法調用微信的接口獲取access_token的,因此你的微信公衆號接口部署在哪裏,就要把那臺電腦的ip地址加入到IP白名單
服務器地址:就是你的域名+接口名:如 http://mydomain.com/wechat/index
令牌(token):記住就行,第一步作公衆號接入的時候就要用這個token
消息加解密密匙:若是消息加解密方式爲‘明文模式’能夠不去記,‘加密方式’就須要在接入接口中配置
稍後等接入接口寫完而且部署到服務器上了,就是在這裏驗證接口是不是通的
node.js 微信接入代碼參考
公衆號接入接口(注意是get請求)
'GET /wechat/index': async (ctx, next) => { wechatApp.auth(ctx.request, ctx.response); },
公衆號接入認證
/** * 微信接入驗證 * @param {Request} req Request 對象 * @param {Response} res Response 對象 */ WeChat.prototype.auth = function (req, res) { var that = this; //1.獲取微信服務器Get請求的參數 signature、timestamp、nonce、echostr var signature = req.query.signature, //微信加密簽名 timestamp = req.query.timestamp, //時間戳 nonce = req.query.nonce, //隨機數 echostr = req.query.echostr; //隨機字符串 //2.將token、timestamp、nonce三個參數進行字典序排序 var array = [this.token, timestamp, nonce]; array.sort(); //3.將三個參數字符串拼接成一個字符串進行sha1加密 var tempStr = array.join(''); const hashCode = crypto.createHash('sha1'); //建立加密類型 var resultCode = hashCode.update(tempStr, 'utf8').digest('hex'); //對傳入的字符串進行加密 //4.開發者得到加密後的字符串可與signature對比,標識該請求來源於微信 if (resultCode === signature) { res.body = echostr // res.send(echostr); } else { res.body = mismatch // res.send('mismatch'); } }
按照微信官方的說明就是:
你在微信公衆平臺點擊提交 公衆號基本配置 後,公衆號會向你配置的服務器地址(URL)發送一個get請求
這個get請求就包含了四個參數:signature\timestamp\nonce\echostr
而後你要作的就是
1)將其中的timestamp、nonce兩個參數和你本身設置的token(共三個參數)進行排序
2)將三個參數字符串拼接成一個字符串進行sha1加密
3)開發者得到加密後的字符串可與signature對比,若是對比一致,就將echostr參數返回(表示接入成功了),不然就返回其餘信息(表示接入失敗了)
若是此時在微信公衆平臺提示驗證經過,那也就經過微信開發的第一步了……