微信JSAPI支付及点金计划详解

最近项目中用过微信JSAPI进行支付的小伙伴们又要头疼了,微信官方团队又莫名其妙的更新了一个叫“点金计划”的东西,升级其实也无所谓,你尽管升级不影响我使用就行了。可惜我们太天真了,你不升级使用这种支付模式我还真就要为你创造点生产事故来引起你们的注意了。

让我们来理解下“点金计划”,其实如果业务中直接支付完成流程结束的也没有影响,但是如果支付成功后需要指定自己的跳转页面进行后续业务的,抱歉出问题了,看一则充满商业气息的公告。

微信支付跳转升级通知.png

知道了问题产生的原因那就开始解决吧,在此之前先为大家简单介绍下微信几种常见而又容易混淆的支付方式。

JSAPI支付

用户通过微信扫码、关注公众号等方式进入商家H5页面,并在微信内调用JSSDK完成支付

H5支付

用户在微信以外的手机浏览器请求微信支付的场景唤起微信支付

APP支付

商户APP中集成微信SDK,用户点击后跳转到微信内完成支付

小程序支付

用户在微信小程序中使用微信支付的场景

其中JSAPI支付和H5支付是最令人傻傻不清楚的,他们最大的区别就在于JSAPI支付必须在微信浏览器内进行支付,而H5支付可以在任意浏览器中进行支付,更多支付方式详见微信支付

介绍完这些让我们来真正了解下JSAPI调起支付

微信支付参数.png

获取微信支付参数示例,记得在初始化时调用这个接口:

  async weChatParams() {
    try {
      // 后端微信参数接口
      const result = await getWeChatParams({
        // 需要的参数
         params1: "",
         params2: "",
         //...
      });
      console.log("result--", result);
      // 根据后端返回成功的code
      if (result.code == "200") {
         // 保存参数
        this.wxData = result.data
      } else {
        // 后端报错提示
        this.$toast({ message: result.msg });
      }
    } catch (error) {
      console.log(error);
    }
  }
微信支付API.png

使用微信JSAPI:

onBridgeReady() {
    // 刚才保存的参数
    const data = this.wxData;
    WeixinJSBridge.invoke(
      "getBrandWCPayRequest",
      {
        appId: data.appId,
        timeStamp: data.timeStamp,
        nonceStr: data.nonceStr,
        package: data.packAge,
        signType: data.signType,
        paySign: data.paySign
      },
      function(res: { err_msg: string }) {
        if (res.err_msg == "get_brand_wcpay_request:ok") {
          console.log("成功: ", res.err_msg);
          // 无法进行指定路径跳转,默认跳出程序
        } else {
          console.log("失败: ", res.err_msg);
        }
      }
    );
  }

微信支付调起支付界面:

  weChatPay() {
    console.log("WeixinJSBridge--", typeof WeixinJSBridge);
    if (typeof WeixinJSBridge === "undefined") {
      if (document.addEventListener) {
        document.addEventListener(
          "WeixinJSBridgeReady",
          this.onBridgeReady,
          false
        );
      } else if (document.attachEvent) {
        document.attachEvent("WeixinJSBridgeReady", this.onBridgeReady);
        document.attachEvent("onWeixinJSBridgeReady", this.onBridgeReady);
      }
    } else {
      this.onBridgeReady();
    }
  }

点击立即支付按钮:

 goToBuy() {
    // 判断微信环境
    const isWeixin = window.navigator.userAgent.toLowerCase();
    if (isWeixin.match(/MicroMessenger/i) === "micromessenger") {
      this.weChatPay();
    }
  }

到这里微信支付流程已经结束,如果需要进行指定页面跳转必须配置“点金计划”。
点金计划产品介绍
点金计划产品文档

点金计划配置.png
支付成功页面.png

如图所示:
1、第一种情况对应未开通点金计划,支付完成后将直接退出程序回到微信主页面;
2、第二种情况对应开通点金计划和官方小票,支付完成停留在此页面;
3、第三种情况对应开通点金计划和商家小票,支付完成停留在此页面。

2和3两种情况的区别在于商家小票可以展示用户自定义的页面,知道了这个后我们就可以在页面上自定义按钮前往指定页面,但是必须以“点金计划”提供的JSAPI进行跳转。

点金计划页面 JSSDK
<script type="text/javascript" charset="UTF-8" src="https://wx.gtimg.com/pay_h5/goldplan/js/jgoldplan-1.0.0.js"></script>
点金计划页面 JSAPI

1、按订单确认是否展示商家小票(onIframeReady 事件):已开通商家小票功能的特约商户,服务商依然可以按照当前订单的情况决定是否展示商家小票(也可选择直接展示官方小票)。
2、调整 Iframe 框架高度(onIframeReady 事件):供服务商调整商家小票区域的整体高度(规则:以宽度 640px 为基准,商家小票高度最小 600px,最大 960px。若服务商通过 jsapi 传入高度小于 600px,页面会展示 600px,传入大于 960px,页面仅展示 960px)。

点金计划设置高度.png

3、外跳新页面(jumpOut 事件):支持从点金计划页面上方的商家小票区域,点击外跳到商家的完整页面(此处不可模拟用户点击自动外跳,否则相关能力会被处罚)。

点金计划回跳指定页面.png
onIframeReady 事件:
onIframeReady.png
超时页面.png

示例(展示官方小票及自定义高度) :

let mchData ={
    action:'onIframeReady',
    displayStyle:'SHOW_OFFICIAL_PAGE',
    height: 960
}
let postData = JSON. stringify(mchData)
parent.postMessage(postData, 'https://payapp.weixin.qq.com')
jumpOut 事件:
jumpOut.png

示例·:

let mchData ={
    action:'jumpOut', 
    jumpOutUrl:'https://www.qq.com'
}
let postData = JSON. stringify(mchData)
parent.postMessage(postData, 'https://payapp.weixin.qq.com')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容