微信支付 (JSSDK支付)

等级 942 0 0

官方文档

微信支付 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

微信授权获取code https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58

准备工作

  • 微信公众平台企业账号
  • 商户号
  • 开通jsapi支付权限
  • 设置了页面授权域名,并且是你网站的域名地址
  • 基本接口权限,尤其是jssdk部分权限,保证尽可能都开通
  • https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3

    1.获取code传给后台

    1.1 获取到code

    // 微信授权,得到code
    getOpendId(appId) {
    const code = this.getQueryString('code')
    this.code = code
    const url = encodeURIComponent(window.location.href)
    if (!code) {
      window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${url}&response_type=code&scope=snsapi_base&state=0#wechat_redirect`
    } else {
      // 这是我调用的后台接口,详见1.2
      // 需要传入code才能获取到用户的信息
      this.wxScope()
    }
    },

参数说明

微信支付 (JSSDK支付)

说明

  • 我代码中的方式不弹出授权页面,直接跳转,只能获取用户openid
  • 如果想弹出授权页面,设置连接中的scope值为snsapi_userinfo,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息

    1.2 将code传给后台

    // 微信授权登陆接口
    wxScope() {
    const code2 = {
      code: this.code // 后台需要的code
    }
    qryWebAccessToken(code2).then(res => {
      if (res.openid) {
        this.openid = res.openid // 得到用户的openid
      } else {
        console.log('微信登陆失败-授权')
        this.fail = true
        this.wx = true
        Toast('微信登陆失败')
        return
      }
    })
    },

    2. 微信支付 - JSSDK支付

2.1 引入js-weixin的模块,流程如下:

引入模块--生成签名(wx.config需要)--结合接口返回参数--唤起wxpay。

2.1.1 装包(weixin-js-sdk),引入模块

npm i (weixin-js-sdk)

import wx from 'weixin-js-sdk'

2.1.2 生成签名(wx.config需要)

这个文件我命名 为了common.js,一会唤醒支付的时候需要用到

import wx from 'weixin-js-sdk
var AppId = ''
var Timestamp = ''
var Signature = ''
var Noncestr = ''
function GetSignature (callback) {
  // qryWxSignature 这个是调用后台获取签名的接口
  qryWxSignature({
    url: window.location.href.split('#')[0]
  }).then((data) => {
    AppId = data.appId
    Timestamp = data.timestamp
    Signature = data.signature
    Noncestr = data.nonceStr
    wx.config({
      beta: true,
      debug: false,
      appId: AppId,
      timestamp: Timestamp,
      nonceStr: Noncestr,
      signature: Signature,
      // 这里是把所有的方法都写出来了 如果只需要一个方法可以只写一个
      jsApiList: [
        'checkJsApi',
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        'hideMenuItems',
        'showMenuItems',
        'hideAllNonBaseMenuItem',
        'showAllNonBaseMenuItem',
        'translateVoice',
        'startRecord',
        'stopRecord',
        'onRecordEnd',
        'playVoice',
        'pauseVoice',
        'stopVoice',
        'uploadVoice',
        'downloadVoice',
        'chooseImage',
        'previewImage',
        'uploadImage',
        'downloadImage',
        'getNetworkType',
        'openLocation',
        'getLocation',
        'hideOptionMenu',
        'showOptionMenu',
        'closeWindow',
        'scanQRCode',
        'chooseWXPay',
        'openProductSpecificView',
        'addCard',
        'chooseCard',
        'openCard',
        'openWXDeviceLib',
        'closeWXDeviceLib',
        'configWXDeviceWiFi',
        'getWXDeviceInfos',
        'sendDataToWXDevice',
        'startScanWXDevice',
        'stopScanWXDevice',
        'connectWXDevice',
        'disconnectWXDevice',
        'getWXDeviceTicket',
        'WeixinJSBridgeReady',
        'onWXDeviceBindStateChange',
        'onWXDeviceStateChange',
        'onScanWXDeviceResult',
        'onReceiveDataFromWXDevice',
        'onWXDeviceBluetoothStateChange'
      ]
    })
    wx.ready(function () {
      console.log(callback, 'callback')
      if (callback) callback()
    })
  })
}
export {
  GetSignature
}

2.1.3 结合接口返回参数--唤起wxpay

参考地址 :https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58

// 引入
import { GetSignature } from '../../../../static/common'
import wx from 'weixin-js-sdk'
// 点击支付

 payNow() {
      var that = this
      // GetSignature为common.js中的GetSignature内容
      GetSignature(() => {
        // wxpayPreOrder 为后台微信支付接口
        wxpayPreOrder(this.payMsg).then(res => {
          wx.chooseWXPay({
             // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。
             // 但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
            timestamp: res.timeStamp, 
            // 支付签名随机串,不长于 32 位
            nonceStr: res.nonceStr, 
            package: res.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
            signType: res.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
            paySign: res.paySign, // 支付签名
            success: function(res) {
              // 支付成功后的回调函数
            },
            fail: function(res) {
              console.log('支付失败')
            },
            complete: function(res) {
              console.log(res, 'complete')
            }
          })
        })
      })
    }
收藏
评论区

相关推荐

微信支付 (JSSDK支付)
官方文档 微信支付 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter7_7&index6 微信授权获取code https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JSSDK.html58 准备工作 微信公
微信小程序支付功能全流程实践
前言 微信小程序为电商类小程序,提供了非常完善、优秀、安全的支付功能。在小程序内可调用微信的API完成支付功能,方便、快捷。小程序开发者在开发小程序时,支付流程是必然要接触到,今天胡哥就小程序支付的全流程为大家一一细说,让小伙伴能快速得掌握小程序支付能力,避免踩坑! 知己知彼,方能百战不殆 小程序支付流程图 小程序支付交互流程图(https:/
微信小程序modal
首先创建一个组件component,组件命名可以为modal modal.wxml的内容为 <view class'modalmask' wx:if'{{show}}' bindtap'clickMask' <view class'modalcontent' <scrollview scrolly class'mainc
基于Vue3+TypeScript+ Vue-Cli4.0构建手机端模板脚手架
vue3h5template基于 Vue3TypeScript VueCli4.0 vant ui sass rem 适配方案axios 封装 jssdk 配置 vconsole 移动端调试,构建手机端模板脚手架项目地址: 建议手机端查看 Node 版本要求Vue CLI 需要 Node.js 8.9 或更高版本
JavaScript 和 Node.js 中事件循环
1.JavaScript中事件循环可以参考《JavaScript忍者秘籍第二版》第十三章,讲解的很好。JavaScript中事件循环,主要就在理解宏任务和微任务这两种异步任务。宏任务(macrotask): setTimeOut 、 setInterval 、 setImmediate 、 I/O 、 各种callback、 UI渲染 、messageCh
HTTPS安全通信过程
一 、两对公私钥 ======== 1、CA公私钥: CA公钥:预装在操作系统,内置在浏览器中。 **备注:**微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认安装在操作系统中,并且设置为操作系统信任的数字证书。 CA私钥:由CA机构保管,不会外泄。 2、服务公私钥: 服
Java安全通信:HTTPS与SSL
1\. HTTPS概念         1)简介            HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的[HTTP](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fbaike.b
PHP之微信JSSDK图片上传预览下载到服务器
1.投票报名 ![PHP之微信JSSDK图片上传预览下载到服务器](http://www.zhimengzhe.com/d/file/shujuku/rontcpmvppy.png) 主要实现报名功能 (1)form表单布局 <section class="content"> <div id="errormsg"
QQ分享 QQ空间分享 API链接:
通过`qq空间`、`qq聊天`、`新浪微博`和微信二维码`分享平台提供的接口`,`实现`把网页中对应的图片、标题、描述的信息参数用javascript获取后传进接口中,实现`一键分享`。 使用到的接口(测试时需要登录,网址和图片必须是公网的,不能是localhost): 1.分享到QQ空间接口:https://sns.qzone.qq.com/cg
Console Api 让 JS 调试更简单、高效
> 所有Console Api  <script type="text/javascript"> console.dir(console); </script> ![](https://oscimg.oschina.net/oscnet/95a860f3d4ec5a09ee3f53761b64594745e.jpg)
DevOps&CloudNative技术交流群
微信群: 添加微信:devsecopser,或者扫描下方二维码添加微信好友,备注加群。 ![](https://oscimg.oschina.net/oscnet/7f93ee88656c4ba36be309c9c097992721f.jpg) 本文分享自微信公众号 - 云原生生态圈(CloudNativeEcoSystem)。 如有侵权,
Electron 快速入门及最新安装教程
> 作者:程序员学院   官方网址:[https://www.chengxuyuan.com](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.chengxuyuan.com)    微信公众号:华仁程序员学院 一、 Electron简介 ------------- Electr
Hash, PushState 和微信 JSSDK 授权
最近将 riot.js 升级到了 3.0,并用上了新版本的 riot-route,原先用了一年多的 2.2.4 版本内置的 riot.route 只支持 hash 形式的 SPA 单页面应用,riot-route 则支持 pushState。 Hash 方式有个缺点,就是服务器不知道地址栏中 # 之后的内容,放在微信里,就导致了未授权用户授权后想返回原界面
Python微信机器人
### Python微信机器人 **本文目录** * 一 简介 * 二 登录微信 * 三 微信好友男女比例 * 四 微信好友地域分布 * 五 微信聊天机器人 ### 一 简介 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。实现了微信登录、收发消息、搜索好友、数
TypeScript快速入门
TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。 TypeScript可以在任何浏览器、任何计算机和任何操作系统上运行,并且是开源的。 TypeScript是微软开源的,它有这强大的技术后盾。 ![](https://oscimg.oschina.net/oscnet/3b63ac2b-6b7f-4c49-