首页 > 其他分享 >h5使用js拉起微信支付

h5使用js拉起微信支付

时间:2024-05-10 16:22:05浏览次数:15  
标签:浏览器 err 微信 前端 h5 下单 支付 js

近期,业务需求对接了微信支付,做个总结。web网页想要拉起微信支付,有两种方法: H5下单支付 , JSAPI支付 。首先纯前端做不了微信支付,必须配合后端才能通过微信的下单请求。接下来说说这两种方法的区别。

H5微信下单支付

这种支付方式是用户在浏览器端打开网页,通过下单等操作,与后端交互,后端向微信端下单获取到 支付链接地址 。然后返回给前端,前端通过打开这个链接地址跳转到微信APP,进行支付后返回到浏览器端。

h5微信支付流程图

  • 电脑端做扫码支付

由于,前端下单后,后端获取到微信的支付链接地址。发送给前端,前端可以通过qrcode第三方库来转换成二维码在前端显示。这里以vue2.x版本项目为例。

  1. 安装依赖
# 以你的项目文件夹 打开 cmd 命令
npm i qrcode -D #安装依赖
  1. 使用
<template>
    <div class="qrcode">
        <img :src="payImg" alt="支付二维码" />
    </div>
</template>
<script>
import QRCode from "qrcode";
export default {
    data(){
        return {
            payImg: null,
        }
    },
    methods:{
        getUrlSrc(words) {
            return new Promise((res, rej) => {
                var QRCodeOpts = {
                    errorCorrectionLevel: "H",
                    type: "image/jpeg",
                    quality: 0.8,
                    width: 400,
                    margin: 1,
                };
                QRCode.toDataURL(words, QRCodeOpts, function (err, url) {
                    if (err) {
                    console.log(err);
                    return rej(err);
                    }
                    res(url);
                });
            });
        },
    },
    mounted(){
        // 调用方法 生成二维码图片
        this.getUrlSrc("https://weixin.....")
            .then(url => {
                // 显示到img元素上
                this.payImg = url
            })
            .catch(err => {
                // 报错了。。。
                alert(err)
            })
    }
}
</script>
  • 注意事项

此方法支付不能在微信内访问页面拉起支付。必须在 外部浏览器 跳转 微信返回的支付地址 才能打开。(否则会提示:请从微信外打开订单,进行支付)。

JSAPI下单支付

这种支付方式适用 微信公众号 ,或 微信内置浏览器 内打开的网页来拉起微信支付。通过与后端交互,后端获取到微信下单所需要的参数(openid至关重要)返回给前端,前端通过此参数直接调用微信的JSAPI,就可以拉取支付了。

  • 网页需要获取code下单发送给后端。

推荐使用 静默授权 获取到 code 后发送给后端,后端通过微信接口获取到微信用户的 openid获取code方法。先要获取到code,然后把这个code发送给后端,后端去通过微信的接口获取到openid(微信用户的openid是唯一的)。

// 判断是否在微信浏览器内
if (/MicroMessenger/i.test(window.navigator.userAgent)) {
    WeixinJSBridge.invoke('getBrandWCPayRequest', {
            // 此参数需要通过后端发送到前端 不推荐前端生成
            "appId": "wx2421b1c4370ec43b", //公众号ID,由商户传入     
            "timeStamp": "1395712654", //时间戳,自1970年以来的秒数     
            "nonceStr": "e61463f8efa94090b1f366cccfbbb444", //随机串     
            "package": "prepay_id=up_wx21201855730335ac86f8c43d1889123400",
            "signType": "RSA", //微信签名方式:     
            "paySign": "...." //微信签名 
        },
        function(res) {
            // get_brand_wcpay_request:cancel 支付过程中用户取消
            // get_brand_wcpay_request:fail	支付失败
            if (res.err_msg == "get_brand_wcpay_request:ok") {
                // 使用以上方式判断前端返回,微信团队郑重提示:
                //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
            }
        });
}
  • 注意

微信公众号需要在设置 网页授权域名jsAPI域名 为你的网站地址,否则会出现地址验证失败。

标签:浏览器,err,微信,前端,h5,下单,支付,js
From: https://www.cnblogs.com/kongyijilafumi/p/18184726

相关文章

  • vue3 vite项目H5页面 ios13进入页面出现白屏问题
    项目中碰见IOS系统进入页面出现白屏问题,记录一下问题排查过程一、页面可能报错进入页面是白屏,页面的 vconsole 也没有显示,首先想到的是页面是不是有什么报错,然后查看了别的机型,都没有问题,定位到只有IOS13有问题,想着会不会是什么语法在IOS13不兼容(这个问题之前出现过一个......
  • Json转Go在线工具
    1、可以将Json字符串在线自动解析校验格式化为go的struct结构体(严格按照Golang标准执行生成struct结构体)2、提供将任意复杂,简单格式的Json字符串转换生成go的struct结构体3、支持Json格式错误提示,不会格式化不符合规范的Json字符串,以保证struct结构体的准确性4、支持选择是......
  • Json压缩转义工具
    1,实现在线压缩Json字符串,压缩Json可以减少在传输过程中消耗的流量,提高传输速度2,Json压缩转义功能也很常用,有些Json被转义过的,可以利用此工具进行去除转义,格式化Json3,Json格式化的时候要确保Json在此之前没有被转义过,转义过的Json不会被格式化,需要先去除转义哦免费使用地址:h......
  • Json生成Java实体类工具
    1,贴入json内容,Javabean的类名、包名即可自动生成JavaBean代码,并可以直接打包下载源码2,支持将任意复杂/简单格式的Json字符串生成Javabean实体类3,提供Json格式错误提示,不会格式化不符合规范的Json字符串,确保了Javabean实体类的准确性4,如果你的Json字段包含系统关键字,又不......
  • Xml和Json在线互转工具
    1、支持将Xml数据转为Json字符串格式2、支持将Json字符串转换为Xml格式的数据3、Json转为Xml数据时,提供自动检测Json格式是否正确,确保转换的Xml数据是准确的4、提供详细的Xml数据和Json字符串数据5、提供示例xml和json示例,供大家测试使用免费使用工具地址:http://tools.linu......
  • json在线解析及格式化工具
    JSON可以将程序语言对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在PHP中,可以将JSON还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化......
  • php使用mysql-text字段存取json字符串
    PHP保存时过滤掉双引号&单引号&tabfunctionformartJsonString($jsonString=''){ $jsonString=str_replace("'","",$jsonString); $jsonString=str_replace('\"',"",$jsonString); $jsonString=st......
  • node.js 封装操作文件类
    constfs=require('fs');constpath=require('path');classFile{constructor(fileName,name,ext,isFile,size,createTime,updateTime){this.fileName=fileName;this.name=name;this.ext=ext;......
  • 2024-05-10 js 常用数组方法
    push():向数组的末尾添加一个或多个元素,并返回新的长度。pop():删除并返回数组的最后一个元素。shift():删除并返回数组的第一个元素。unshift():向数组的开头添加一个或多个元素,并返回新的长度。splice():通过删除或替换现有元素或者添加新元素来修改数组,并以数组形式返回被修改......
  • 更优雅的使用Gson解析Json
     Gson背靠Google这棵大树,拥有广泛的社区支持和相对丰富的文档资源,同时因其简单直观的API,一直以来基本稳坐Android开发序列化的头把交椅(直到Google宣布kotlin成为Android开发的首选语言)。本文对Gson的使用及主要流程做下分析。Gson的基本使用Gson依赖 kotlin复制代码d......