前端微信JSAPI支付

简介: 前端微信JSAPI支付

前言

这篇文章适合没做过微信JSAPI支付的人,用过的大佬可以浅略看看,本文采用JQ + 搜狐提供的ip搜索

第一步,环境

JSAPI是用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程

1.他是在微信浏览器里面才能调起的`支付方式`
2.上面说到既然是微信浏览器,我们就要想到`微信开发者工具` => 公众号开发(进行去调试)

第二步,登录

1.开发工具弄好了,接下来就是拿到哪个微信号给你付钱了。
2.要想微信号给公众号(你)付钱,首先你就要让微信用户授权给你这个公众号(用户和公众号会有个id,就是openid))

接下来就是怎么去拿到openid呢,详情看官网官方文档

获取openid官方文档介绍

var ua = navigator.userAgent.toLowerCase();
// 判断是否在微信浏览器
if (ua.indexOf('micromessenger') != -1) {
  if (!openid) {
      let code;
      try {
          // 获取到code,以拿到openid
          code = v['code'];
      } catch (err) {
          code = false;
      }
      // 判断是否授权
      if (!code) {
          // 商家id
          let appid = "wx5b77d71e115cb6a4";
          // 需要回调的地址,-》当前路径下的online-recharge.html
          let redirect_uri = payHref() + 'online-recharge.html';
          // 授权类型
          let scope = 'snsapi_base';
          location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=${scope}&state=STATE#wechat_redirect`
      } else {
          // 请求接口,获取openid
          let url = ApiUrl() + '/pay/vx/get-openid';
          axios.post(url,
              { "messageType": 0, "messageContent": code }) //也可以直接拼接在url
              .then(function (rs) {
                  if (rs.data.messageCode == 500) {
                      $.alert(rs.data.errorMessage);
                  }
                  if (rs.data.messageCode == 200) {
                      console.log(rs.data.messageContent)
                      let messageContent = JSON.parse(rs.data.messageContent);
                      if (messageContent.errcode) {
                          $.alert('获取openid失败');
                      } else {
                          let openid = messageContent.openid;
                          if (openid) {
                              // 将openid存到缓存中
                              storeage.setItem("openid", openid);
                          }
                      }
                  }
              })
      }
  }

第四步,调起支付

<!-- 搜狐提供的ip搜索, returnCitySN["cip"] -->
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
// 
if (in_weixin) {
  // openid 
    let openid = storeage["openid"];
    // 当前手机的IP
    let cip = returnCitySN["cip"];
    // 支付类型
    let tradeType = "JSAPI";
    // 购买信息组成的对象
    let messageContent_pay = {
        "userGuid": userGuid,
        "unitGuid": unitGuid,
        "cardNumber": cardNumber,
        "logicalCardNumber": logicalCardNumber,
        "rechargeWallet": walletNo,
        "rechargeModel": 2,
        "rechargeAmount": $("#amount").val(),
        "ip": cip,
        "openid": openid,
        "tradeType": tradeType,
    }
    // 获取微信支付信息
    wx_pay(messageContent_pay)
} else {
    $.alert('请到微信公众号充值')
}
// 获取微信支付信息
function wx_pay(messageContent) {
    let url = ApiUrl() + '/pay/vx/vxPay';
    axios({
        method: 'POST',
        url,
        data: qs.stringify(messageContent), headers: { 'content-type': 'application/x-www-form-urlencoded' },
    }) //也可以直接拼接在url
        .then(function (rs) {
            if (rs.data.messageCode == 200) {
                let timeStamp = (new Date()).getTime();
                let appId = "wx5b77d71e115cb6a4";
                // 调起微信支付密码窗口
                onBridgeReady(rs.data.messageContent.payRequest, rs.data.messageContent.outTradeNo)
            } else {
                $.alert(rs.data.errorMessage);
            }
        })
}
// 这个是调起微信支付密码窗口,输完密码后会微信后台会给到你回调,这时候你就完成了本次支付
function onBridgeReady(payObj, outTradeNo) {
    WeixinJSBridge.invoke(
        'getBrandWCPayRequest', payObj,
        function (res) {
          // 支付成功
            if (res.err_msg == "get_brand_wcpay_request:ok") {
                // 使用以上方式判断前端返回,微信团队郑重提示:
                //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
                // 跳转到自己写的订单详情页面
                location.href = myHref() + "recharge-result.html?out_trade_no=" + outTradeNo;
            } else {
                $.alert('支付失败');
            }
        });
}


目录
相关文章
|
6天前
|
API 开发者
微信native支付对接案例详解
本文详细介绍了微信Native支付的对接流程,包括效果展示、产品介绍、接入前准备、开发指引、API列表、支付通知等,并强调了只有通过微信认证的服务号才能对接微信支付。每年需支付300元认证费用。
23 3
|
2月前
|
Web App开发 移动开发 前端开发
H5微信外支付(移动端浏览器)
H5微信外支付(移动端浏览器)
49 1
 H5微信外支付(移动端浏览器)
|
2月前
|
移动开发 安全 API
微信H5支付--微信JS-SDK支付--点金计划
本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
95 0
微信H5支付--微信JS-SDK支付--点金计划
|
5月前
|
开发框架 移动开发 JSON
利用微信公众号实现商品的展示和支付(1)
利用微信公众号实现商品的展示和支付(1)
|
4月前
|
移动开发 前端开发 JavaScript
|
5月前
|
安全 API Windows
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
|
5月前
|
前端开发 开发工具 数据库
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
|
5月前
|
存储 开发框架 JavaScript
利用微信公众号实现商品的展示和支付(2)
利用微信公众号实现商品的展示和支付(2)
|
6月前
|
PHP 开发工具
php免费用免认证的微信支付宝支付
php免费用免认证的微信支付宝支付
44 5
|
6月前
|
移动开发 小程序 开发工具
微信支付的类型分析(JSAPI+APP+H5+NATIVE+付款码+合单)
微信支付的类型分析(JSAPI+APP+H5+NATIVE+付款码+合单)
611 1