uni-app 开发微信公众号(H5)分享 支付 JSSDK 的使用

约定不等于承诺〃 2022-12-10 05:00 1198阅读 0赞

#

UNI-APP 开发微信公众号(H5)分享 支付 JSSDK 的使用

  1. 先看一遍 微信 JS SDK 文档:http://caibaojian.com/wxwiki/0030551f015f01ecaa56d20b88ee3c6cb32503bf.html
  1. 什么是微信JSSDK ?

    开发微信公众号的嵌入网页。想要拥有在微信浏览器的功能,就必须使用 wx JSSDK 来获取基础能力,从而实现业务。

  2. 使用范围 ?

    微信公众号的操作,app 、微信小程序 有单独的方法来设置功能,此jssdk 只适用于 微信公众号。

  3. 前期准备?

    公众号需要申请,申请特定的能力。最重要的是最要做一步参数处理

    流程如下: 网页向java-web请求微信分享,然后通过公众号的appid和secret获取微信的access_token,然后通过access_token获取微信ticket,微信返回的ticket生成时间戳和nonceStr,加上当前的url 求你注意下要传前端的url,代码我写在下面了,不传递永远不可能签名成功 和ticket进行签名生成signature,然后将 appid,timestamp,nonceStr,signature返回给前端页面,前端通过config接口注入权限验证配置即可(可以使用微信开发工具测试)

    1. /** * 获取当前项目的链接 */
    2. export function getWebUrl() {
    3. return window.location.href.substring(0, window.location.href.indexOf('#'));
    4. }

    点击查看 java 示例

  4. 引入方式 ?
    在 uniapp 中可以使用模块方式引用微信 js-sdk ,微信官网直接下载的使用有问题,可以使用 jweixin-module。

    安装

    • NPM安装方式(不会用NPM就不要用这种方式)

      npm install jweixin-module —save

    • 下载使用方式
      下载地址:https://unpkg.com/jweixin-module@1.6.0/lib/index.js

    使用

    1. var jweixin = require('jweixin-module')
    2. jweixin.ready(function(){
    3. // TODO
    4. });

    建议大家使用第一种方式,简单便捷。一句话,直接导入进去。没有啥后顾之忧。
    不建议使用第二种,第二种引入的话,可能会有问题,报错的情况发生。
    可能看到这里大家还是不知道如何操作。那么下面示例可以看一下。

  5. 使用方法 ?

    工具类 jws.js

    1. import * as scanCodeService from "@/common/service/scanCodeService"
    2. // jwx.js
    3. //#ifdef H5
    4. const jweixin = require('jweixin-module')
    5. //#endif
    6. export function configWeiXin(callback) {
    7. //懂点前端应该知道这里是查询接口的箭头函数,内部细节不写了,就是查询后端返回的公众号参数信息
    8. scanCodeService.getWeiXinJsConfig().then(result => {
    9. let apiList = [ // 可能需要用到的能力 需要啥就写啥。多写也没有坏处
    10. 'onMenuShareAppMessage',
    11. 'onMenuShareTimeline',
    12. 'hideOptionMenu',
    13. 'showOptionMenu',
    14. 'chooseWXPay',
    15. 'checkJsApi',
    16. 'openLocation',
    17. 'getLocation'
    18. ];
    19. let info = {
    20. debug: false, // 调试,发布的时候改为false
    21. appId: result.data.appId,
    22. nonceStr: result.data.noncestr,
    23. timestamp: result.data.timestamp,
    24. signature: result.data.signature,
    25. jsApiList: apiList
    26. };
    27. jweixin.config(info);
    28. jweixin.error(err => {
    29. console.log('config fail:', err);
    30. });
    31. jweixin.ready(res => {
    32. if (callback) callback(jweixin);
    33. });
    34. }).catch()
    35. }
  6. 支付示例

    payUtil.js

    1. import * as jwx from "@/*****/jws"
    2. /** 1. 微信 浏览器 web 支付 2. @param {Object} orderInfo */
    3. export async function wxChatWebPay(orderInfo) {
    4. return new Promise((resolve) => {
    5. jwx.configWeiXin(jweixin => {
    6. jweixin.chooseWXPay({
    7. nonceStr: orderInfo.nonceStr,
    8. timestamp: orderInfo.timestamp,
    9. package: orderInfo.package,
    10. signType: orderInfo.signType,
    11. paySign: orderInfo.paySign,
    12. success: () => {
    13. // 支付成功后
    14. let count = 1;
    15. let timer = setInterval(function() {
    16. uni.request({
    17. url: '回调查询'
    18. method: "GET",
    19. data: { },
    20. success: (res) => {
    21. if (res.data.code === 0) {
    22. clearInterval(timer);
    23. timer = null;
    24. uni.hideLoading()
    25. resolve(true);
    26. } else if (res.data.code === -1) {
    27. if (count === 12) {
    28. clearInterval(timer);
    29. timer = null;
    30. resolve(false);
    31. }
    32. count++;
    33. } else {
    34. resolve(false);
    35. }
    36. },
    37. complete: () => { }
    38. });
    39. }, 2000);
    40. },
    41. fail: err => {
    42. // 支付失败
    43. resolve(false);
    44. },
    45. cancel: err => {
    46. // 支付取消
    47. resolve(false);
    48. }
    49. });
    50. });
    51. })
    52. }
  7. 分享示例:

    分享需要注意,进入页面时就要设置好分享的参数。这样点击右上角分享才能分享的是你是设置的参数。

    比如你想全局设置的话。不管在哪一个页面都能分享是同一个内容。然后这里面是有层级关系的。

    全局 < 页面 ,单独页面上设置的分享比全局设置的要高.

    全局 分享设置

    需要利用 全局混入的方式设置。 app.vue 中 写下下面示例代码。

    1. import * as jwx from "@/*****/jws"
    2. /** *微信公众号 全局混入微信 wxjsSdk * 偏于微信公众号获取位置 支付 等等 内置 sdk 使用 * 条件必须是公众号才配置此功能参数 * 全局混入 公众号分享设置内容 */
    3. Vue.mixin({
    4. onUnload() {
    5. },
    6. onShow() {
    7. // 公众号全页面设置分享 这里的工具类我就不提供了,
    8. // 具体就是一些条件判断 如果是h5 并且是微信公众号的情况下 才会执行
    9. if (authenticateUtil.isYlsdH5()) {
    10. if (UtilsService.isWeixinByJs()) {
    11. // 分享页面配置
    12. jwx.configWeiXin(jweixin => {
    13. let shareInfo = {
    14. title: '标题内容',
    15. desc: '描述',
    16. link: window.location.href,
    17. imgUrl: '图片地址',
    18. success: function() { }
    19. };
    20. jweixin.onMenuShareAppMessage(shareInfo);
    21. jweixin.onMenuShareTimeline(shareInfo);
    22. });
    23. }
    24. }
    25. },
    26. methods: {
    27. },
    28. onLoad() {
    29. }
  1. });
  2. **单独页面分享设置**
  3. 把内容写在 单独页面里面就行了。 他的层级比全局的要高,请注意。
  4. import * as jwx from "@/*****/jws"
  5. onShow() {
  6. // 公众号全页面设置分享 这里的工具类我就不提供了,
  7. // 具体就是一些条件判断 如果是h5 并且是微信公众号的情况下 才会执行
  8. if (authenticateUtil.isYlsdH5()) {
  9. if (UtilsService.isWeixinByJs()) {
  10. // 分享页面配置
  11. jwx.configWeiXin(jweixin => {
  12. let shareInfo = {
  13. title: '标题内容',
  14. desc: '描述',
  15. link: window.location.href,
  16. imgUrl: '图片地址',
  17. success: function() { }
  18. };
  19. jweixin.onMenuShareAppMessage(shareInfo);
  20. jweixin.onMenuShareTimeline(shareInfo);
  21. });
  22. }
  23. }
  24. },
  1. 注意事项:
    ** 好兄弟!!! 公众号后台注意:别忘了配置 js 域名 不然不管用。**

    -————————————————————————-分割线 2021-2-8 —————————————————————
    发现评论区 不确定 scanCodeService.getWeiXinJsConfig() 是一个什么方法 返回什么参数 我把内容细节给大家 发出来 方便大家学习。

    // 获取微信jssdk的授权token
    // http.get 是我封装的请求 你可以用 uni.request 方式返回 调用服务器接口,这个因人而异
    export function getWeiXinJsConfig() {

    1. return http.get('你的服务器接口地址',
    2. {
    3. header: authenticateUtil.getHeader()
    4. }).then(response => {
    5. if (response.data && response.data.code === 0) {
    6. return response.data;
    7. } else {
    8. return null;
    9. }
    10. })
    11. .catch(error => {
    12. return error;
    13. });

    }

UtilService.js

  1. /** * 根据设备判断是否是微信环境的 */
  2. export function isWeixinByJs() {
  3. let ua = window.navigator.userAgent.toLowerCase();
  4. return ua.match(/MicroMessenger/i) == 'micromessenger';
  5. }
  6. 有问题欢迎大家指出,感觉 不清楚、实现不出效果、感觉混乱的读者。请联系 qq 1019011560.

发表评论

表情:
评论列表 (有 0 条评论,1198人围观)

还没有评论,来说两句吧...

相关阅读

    相关 uniapp公众H5分享支付

    公众号H5要使用js-sdk才能进行分享跟支付,但是,一直使用小程序的分享都是点击后就能够进入微信端我的好友或者群进行分享,而这里使用sdk还是不能够直接的点击后进行分享,要点