【一次嘗試】anger-wechat 封裝經常使用微信api

原由

最近開發微信,遇到了各類問題,看文檔看了好多遍仍然只知其一;不知其二,因此就嘗試把微信api封裝了一下,因此分享一下,有問題提交Issues哦。javascript

項目地址

anger-wechathtml

anger-wechat 😒🐷

Directory

Getting started

npm install anger-wechat --savenpm

Use

var AngerWechat = require('anger-wechat')
var weixinApi = new AngerWechat({
    appId: '[your appId]', // appId 必傳
    appSecret: '[your appSecret]', // appSecret 必傳
    authUrl: 'http://www.test.cc/get-weixin-code.html'
})
複製代碼

若是須要支付的話json

var AngerWechat = require('anger-wechat')
var weixinApi = new AngerWechat({
    appId: '[your appId]', // appId 必傳
    appSecret: '[your appSecret]', // appSecret 必傳
    authUrl: 'http://www.test.cc/get-weixin-code.html', // 可選 微信auth2.0受權公共頁面
    payment: { // 可選 若是須要支付模塊的話
        mchId: '123456',
        partnerKey: '456789',
        pfx: path.join(__dirname, 'apiclient_cert.p12'), //【可選】證書路徑,不傳大多接口掉不了
        notifyUrl: '' // 【可選】微信支付接受到結果'
    }
})
複製代碼

Global

getGlobalAccessToken

全局使用,建議保存在數據庫小程序

獲取 access_token 戳我查看官方文檔api

access_token是公衆號的全局惟一接口調用憑據,公衆號調用各接口時都需使用access_token。開發者須要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前爲2個小時,需定時刷新,重複獲取將致使上次獲取的access_token失效。

let access_token = await weixinApi.getGlobalAccessToken()
複製代碼
{ 
	"code": 200,
	"msg": "請求成功",
	"data": { 
		"access_token": "11_oTBrYVsT9wqa_-q3WDNEBOtfz1XKdM7YKIcNBEiu29Wfh5yTnlqaj5W0hMuxZ7C9FlY7CxD0RjR35V1ik1M3Nyi5QENcgFKhh0gYoBnAXEQ2oV93sVtO7IRqhh1kd9QLG8fwyA3vFRdifpJCOVLgAGAVCS",
		"expires_in": 7200 
	} 
}
複製代碼


isWechat

判斷是不是微信環境

let ua = request.headers["user-agent"]
let isWeixin = weixinApi.isWechat(ua) // 傳入 `UserAgent` 字符串,返回 true | false
複製代碼


Web

[AngerWechat.Web]

getJsTicket

全局使用,建議保存在數據庫

獲取 js api_ticket 戳我查看官方文檔

api_ticket 是用於調用微信卡券JS API的臨時票據,有效期爲7200 秒,經過access_token 來獲取。

let jsTrickt = await weixinApi.Web.getJsTicket({
    access_token: '11_oTBrYVsT9wqa_-q3WDNEBOtfz1XKdM7YKIcNBEiu29Wfh5yTnlqaj5W0hMuxZ7C9FlY7CxD0RjR35V1ik1M3Nyi5QENcgFKhh0gYoBnAXEQ2oV93sVtO7IRqhh1kd9QLG8fwyA3vFRdifpJCOVLgAGAVCS' // 以上一步獲取到的access_token 獲取 js api_ticket
  })
複製代碼
{
	"code": 200,
	"msg": "ok",
	"data": {
		"errcode": 0,
		"errmsg": "ok",
		"ticket": "HoagFKDcsGMVCIY2vOjf9oKOmI5MRTBgKJJwCDQ2BnyLbfAJHCZXUIs992xQP246Nzp7LCNupv5Jablw8COZ_w",
		"expires_in": 7200
	}
}
複製代碼


getAuthUrl

獲取 Auth地址,重定向以後用來獲取code

let authURl = weixinApi.Web.getAuthUrl({
	redirect_uri: 'http://www.baidu.com',
	scope: 'snsapi_userinfo' // snsapi_base:靜默受權,snsapi_userinfo:提示受權(能夠後續獲取用戶信息)
})
console.log(authURl)
// http://www.toolos.cc/get-weixin-code.html?appid=wxf638c1f64239e786&redirect_uri=http://www.baidu.com&scope=snsapi_userinfo&state=STATE
複製代碼


getAuthAccessTokenByCode

根據code獲取 openid

let codeInfo = await weixinApi.Web.getAuthAccessTokenByCode({
    code: '061729xv1BtSAa09g8yv1hr0xv1729xB'
})
複製代碼
{
	"code": 200,
	"msg": "請求成功",
	"data": {
		"access_token": "11_Vc7D8AoYURWoECzJgD6Q1ccUOOHypO6mU0RQF7BnliKKCY5arfVvl0h3PWURwpK7QFgPLfDkHLX-9Dif6BTntw",
		"expires_in": 7200,
		"refresh_token": "11_ii3uONcMPA-04RjuLlckMMiwaDGF2MjW2SB5vOI3Sshz39PAVn7kOyC80_pPmmRJxqbfJ3Rdw07WG154AeP83Q",
		"openid": "oI-Aa04T6FrpFFpTfyAaXR4SKacU",
		"scope": "snsapi_userinfo"
	}
}
複製代碼


getUserInfo

根據 getAuthAccessTokenByCode 獲取的 access_tokenopenid 獲取用戶信息,注意這裏的獲取回調url方法 getAuthUrlscope 須要傳 snsapi_userinfo

let userInfo = await weixinApi.Web.getUserInfo({
	access_token: codeInfo.data.access_token,
	openid: codeInfo.data.openid
})
複製代碼
{
	"code": 200,
	"msg": "請求成功",
	"data": {
		"openid": "oI-Aa04T6FrpFFpTfyAaXR4SKacU",
		"nickname": "吃魚的帆",
		"sex": 1,
		"language": "zh_CN",
		"city": "**",
		"province": "**",
		"country": "中國",
		"headimgurl": "http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIS3x9dFdptD1s2ZZMTDCriaiaXiaDPtyZw3vfMmJLyQ8PU8laBv4MNnJh5c9QWtTQey0m4FYUPVEvAQ/132",
		"privilege": []
	}
}
複製代碼


getJsSdkConfig

獲取js sdk config配置 微信 JS 接口簽名校驗工具

let jsTricktConfig = await weixinApi.Web.getJsSdkConfig({
	ticket: 'HoagFKDcsGMVCIY2vOjf9oKOmI5MRTBgKJJwCDQ2Bnx34ua3MVs9zUZpV0wQPe8h83AwFSZQREHGgmuKpqvdsg',
	url: 'http://www.toolos.cc' // 調用js sdk 頁面地址
})
複製代碼
{
	"appId": "wxf638c1f64239e786",
	"signature": "2c18eb8d6adaa5e02a9df517e776f5eef40ed402",
	"noncestr": "04b21a6a-caea-4878-9fdb-8b2c1ff699b0",
	"timestamp": 1530636997,
	"jsapi_ticket": "HoagFKDcsGMVCIY2vOjf9oKOmI5MRTBgKJJwCDQ2Bnx34ua3MVs9zUZpV0wQPe8h83AwFSZQREHGgmuKpqvdsg"
}
複製代碼


Mini

[AngerWechat.Mini]

getOpenidByCode

根據小程序傳來的code獲取openid等信息 臨時登陸憑證code 獲取 session_key 和 openid 等。

let info = await weixinApi.Mini.getOpenidByCode({
    code: 'xxxxxxxxxxxxxx'
})
複製代碼
{
    "openid" : "oynY34-0Err_YssQIFsK-Ht1eGs",
    "session_key" : "sPxOFsssssCP54n6cCfshw=="
}
複製代碼


支付

戳我查看文檔地址

附錄

關於 authUrl 參數

參考 GetWeixinCode

校驗工具

請我喝杯咖啡,支持更多開源

1024.png
相關文章
相關標籤/搜索