在app端h5调用原生的分享功能,经过传递 title , desc,link 等参数能够自定义分享连接的样式以下: html
appID
和 appsecret
具体流程能够点击查看具体流程,重点说下第二点,验证服务器有效性。node
GET
,咱们接受到这些参数后须要进行加密而后返回加密后的值做为验证。接下来来写接口。api
// 须要引入 sha1 包来将字符串转化
const sha1 = require('sha1')
router.get('/',async ctx=>{
// 与你填写的 Token 保持一致
const token = 'gwxtoken'
const {
signature,
timestamp,
nonce,
echostr
} = ctx.query
// 进行字典排序加密
let str = [token, timestamp, nonce].sort().join("");
let sha = sha1(str)
// 校验微信加密签名,若是来自微信将 echostr 原样返回
if (sha === signature) {
ctx.body = echostr
} else {
ctx.body = "wrong"
}
})
复制代码
请求微信 access_token 接口,参数以下,请求类型为 GET ,能够拿到 access_token 的值。安全
grant_type | appid | secret |
---|---|---|
填写 client_credential | 测试信息的appID | 测试信息的appsecret |
请求微信 jsapi_ticket 接口,参数以下,请求类型为 GET,能够拿到 的值bash
access_token | type |
---|---|
填写 access_token 的值 | 填写 jsapi |
const request = require('request')
// 获取 access_token
router.get('/assess-token',async ctx=>{
let result = await request('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appID&secret=appsecret')
ctx.body = result
})
function getData(url){
return new Promise((resolve,reject)=>{
request(url,function(err,res,body){
resolve(body)
})
})
}
// 获取 jsapi_ticket
router.get('/share',async ctx=>{
// 获取客户端传递过来的 access_token 和分享地址
const {sessionKey,link} = ctx.request.query
let noncestr = '201913' // 自定义
let timestamp = Math.floor(Date.now() / 1000) // 当前时间单位为 秒
let result = await getData('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='+sessionKey+'&type=jsapi')
let tiket = JSON.parse(result).ticket
ctx.body = {
noncestr,
timestamp,
signature:sha1('jsapi_ticket=' + tiket + '&noncestr=' + noncestr + '×tamp=' + timestamp +'&url='+link)
}
})
复制代码
须要注意:服务器
var request = require('request');
request('http://www.google.com', function (error, response, body) {
// 打印值能够发现,body才是咱们想要的 ticket 值
});
复制代码
调用服务端的接口 为了获取服务端定义的 timestamp
,nonceStr
,signature
这三个值,这三个值须要保持和服务端同步微信
wx.config({
debug: true, // 开启调试模式,调用的全部api的返回值会在客户端alert出来,若要查看传入的参数,能够在pc端打开,参数信息会经过log打出,仅在pc端时才会打印。
appId: 'AppId', // 必填,企业号的惟一标识,此处填写企业号corpid
timestamp:'timestamp', // 必填,生成签名的时间戳
nonceStr: nonceStr, // 必填,生成签名的随机串
signature,// 必填,签名,见附录1
jsApiList: ['onMenuShareTimeline', // 分享到朋友圈
'onMenuShareAppMessage', // 分享给朋友
'onMenuShareQQ',// 分享到QQ
'onMenuShareWeibo',// 分享到腾讯微博
'onMenuShareQZone'] // 必填,须要使用的JS接口列表,全部JS接口列表见附录2
});
复制代码
在须要自定义分享连接或其余 sdk 支持的功能能够经过 wx.ready 来初始化这些功能,拿分享功能做为例子,更多功能参考文档session
wx.onMenuShareAppMessage({
title: '', // 分享标题
desc: '', // 分享描述
link: '', // 分享连接,该连接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: '', // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 若是type是music或video,则要提供数据连接,默认为空
success: function () {
// 用户点击了分享后执行的回调函数
}
})
复制代码
当你看到这个提示框时候,那么你已经完成 sdk 配置 和服务端返回的 signature 的校验。记录了一次总体使用的过程,方便之后查看 app