Для студентов, работающих на мобильном терминале H5, WeChat является незаменимым входом.Естественно, нам нужно вызывать различные интерфейсы, предоставляемые WeChat, на H5 или JS.Нам также необходимо выполнять различные проверки подписи в соответствии с требованиями WeChat, чтобы мы могли наконец-то прибыл.Для наших нужд на GITHUB также есть много библиотек, которые можно использовать в этом отношении, но они всегда более или менее не в состоянии полностью удовлетворить потребности, или им приходится платить много дополнительной разработки, поэтому я также разработал сам.библиотекаwechat-jssdkЧтобы максимизировать функции WeChat JSSDK, эта библиотека фокусируется только на функциях, предоставляемых jssdk, и обеспечивает различную поддержку проверки на стороне сервера (NodeJS), а также автоматически управляет обработкой истечения срока действия различных токенов и билетов, чтобы разработчики могли больше сосредоточиться на сам бизнес. Ну, после разговора о ПОЧЕМУ, вот КАК: Сначала демонстрационная картинка:
основной набор функций
- 💓 Сервер
- 💗 Сторона браузера
- 🔓Веб-авторизация OAuth
- 🍟 купоны WeChat
- 💳Оплата WeChat
- 💿 Используйте магазины
- 🎥 Полная демонстрация
инструкции
npm install wechat-jssdk --save
или
yarn add wechat-jssdk
//require并初始化
const Wechat = require('wechat-jssdk');
const wx = new Wechat(wechatConfig);
Wechat Config
wechatConfig
в следующем формате:
{
//第一个为设置网页授权回调地址
wechatRedirectUrl: "http://yourdomain.com/wechat/oauth-callback",
wechatToken: "xxx", //可选,第一次在微信控制台保存开发者配置信息时使用
appId: "xxx",
appSecret: "xxx",
card: true, //开启卡券支持,默认关闭
payment: true, //开启支付支持,默认关闭
merchantId: '', //商户ID
paymentSandBox: true, //沙箱模式,验收用例
paymentKey: '', //必传,验签密钥,TIP:获取沙箱密钥也需要真实的密钥,所以即使在沙箱模式下,真实验签密钥也需要传入。
//pfx 证书
paymentCertificatePfx: fs.readFileSync(path.join(process.cwd(), 'cert/apiclient_cert.p12')),
//默认微信支付通知地址
paymentNotifyUrl: `http://your.domain.com/api/wechat/payment/`,
}
Настройте среду WeChat
1. Теперь вообще дайтеMP_verify_xxx.txt
Файл помещается в корневой каталог вашего сайта, и WeChat может автоматически его проверить.
2. Вам также необходимо предоставить API, чтобы браузер мог получить подпись текущего адреса.
//express风格
router.get('/get-signature', function(req, res) {
wx.jssdk.getSignature(req.query.url).then(function(signatureDate) {
res.json(signatureDate);
});
});
3. После получения подписи переходим к следующему шагу использования браузера.
сторона браузера
js в интерфейсе:
//ES6
import WechatJSSDK from 'wechat-jssdk/dist/client';
//commonjs
const WechatJSSDK = require('wechat-jssdk/dist/client');
//others
window.WechatJSSDK
//然后实例化:
const wechatObj = new WechatJSSDK(config);
config
Должно быть:
const config = {
//前4个是微信验证签名必须的参数,第2-4个参数为类似上面 '/get-signature' 从node端获取的结果
'appId': 'xxx',
'nonceStr': 'xxx',
'signature': 'xxx',
'timestamp': 'xxx',
//下面为可选参数
'success': function(wechatObj){}, //微信签名成功回调函数, 跟 'successCallback' 一样
'error': function(err, wechatObj){}, //微信签名失败回调函数, 跟 'errorCallback' 一样
'debug': true, //开启 debug 模式
'jsApiList': [], //设置所有想要使用的微信jsapi列表, 默认值为 ['onMenuShareTimeline', 'onMenuShareAppMessage'],分享到朋友圈及聊天记录
'customUrl': '' //自定义微信js链接
}
После успешной проверки подписи вы можете настроить общий контент:
//自定义分享到聊天窗口
//内部调用 `wechatObj.callWechatApi('onMenuShareAppMessage', {...})`, 语法糖而已
wechatObj.shareOnChat({
type: 'link',
title: 'title',
link: location.href,
imgUrl: '/logo.png',
desc: 'description',
success: function (){},
cancel: function (){}
});
//自定义分享到朋友圈
//语法糖
wechatObj.shareOnMoment({
type: 'link',
title: 'title',
link: location.href,
imgUrl: '/logo.png'
});
Чтобы получить исходный объект WeChatwx
, в состоянии пройтиwechatObj.getOriginalWx()
чтобы получить.
Если первая проверка не удалась, вы можетеerror
Обновите информацию о подписи в обратном вызове и повторно отправьте запрос на проверку:
wechatObj.signSignature(newSignatureConfig);
, newSignatureConfig
Просто включите:
{
'nonceStr': 'xxx',
'signature': 'xxx',
'timestamp': 'xxx',
}
Позвоните в другие интерфейсы WeChat:
wechatObj.callWechatApi(apiName, apiConfig)
apiName
а такжеapiConfig
Пожалуйста, обратитесь к официальной документации по интерфейсу WeChat.
OAuth
Сгенерированный по умолчанию URL-адрес авторизации WeChat:wx.oauth.snsUserInfoUrl
а такжеwx.oauth.snsUserBaseUrl
, где URL-адрес обратного вызова по умолчаниюwechatConfig
настроен вwechatRedirectUrl
.
Вы также можете позвонитьwx.oauth.generateOAuthUrl(customUrl, scope, state)
с пользовательского адреса обратного вызова
//callback url handler
//如"wechatRedirectUrl"配置为 "http://127.0.0.1/wechat/oauth-callback", 你的路由需要为:
router.get('/wechat/oauth-callback', function (req, res) {
//得到code,获取用户信息
wx.oauth.getUserInfo(req.query.code)
.then(function(userProfile) {
console.log(userProfile)
res.render("demo", {
wechatInfo: userProfile
});
});
});
СОВЕТ: Убедитесь, что указанное выше имя домена адреса перенаправления было установлено в настройках адреса обратного вызова авторизации в WeChat.
Купоны карт WeChat
установить в wechatconfigcard: true
Информацию о поддержке сервером функции карточного купона см.demo.
Чтобы просмотреть Pass API, см.cards apis
WeChat Pay
установить в wechatconfigpayment: true
Для обеспечения поддержки функции оплаты WeChat на стороне сервера некоторые другие необходимые конфигурации для оплаты также должны быть установлены вместе.
Ссылаться наdemo.
Чтобы просмотреть платежные API, см.payment apis
Использование магазинов
Магазин используется для настройки сохраняемости токена хранилища (например, файлов, ожидания базы данных) и реализации собственного Магазина, см.API
Поставляется с магазином:FileStore
, MongoStore
, По умолчаниюFileStore
, Хранится вwechat-info.json
документ.
APIs
ПроверитьAPI wiki
Demo
Вытяните элемент:git clone git@github.com:JasonBoy/wechat-jssdk.git
копироватьdemo/wechat-config-sample.js
прибытьdemo/wechat-config.js
,
Затем измените его внутриappId
, appSecret
, и другиенастроитьДругие конфигурации, такие как оплата Если вам нужно использовать функцию оплаты.
потомnpm start
илиnpm run dev
, используйте инструмент разработчика WeChat для тестирования.
В заключение
Ну, общее использование, как указано выше, в основном соответствует большинству функциональных требований JSSDK.Если вам интересно, вы можете перейти кGithubпопытайся.