后端java开发,前端vue3,完成微信jsapi支付,使用官方SDK,简单明了,直接可用

需求要求:用户点开链接直接进行付款,原来打算使用微信H5进行支付,但是审核太麻烦,审核和多次都没通过,并且H5支付只能通过浏览器打开链接,然后唤醒微信进行支付,如果在微信中点开链接是无法支付的。然后采用微信jsapi方案进行支付。支付前需要申请公众号,支付商户号,商户号和公众号进行绑定。支付整体逻辑,用户点开链接,静默获取用户openId(生成支付订单的时候会用到),生成预支付订单,获取到预支付订单的参数后,前端换起微信支付。

准备阶段,我就直接使用另外一名博主的截图,自己难得取图了,具体代码和这位博主有些区别,因为我是直接使用微信官方的sdk。在实际开发中也遇到一些坑,后面会描述。微信公众号-JSAPI支付(保姆级教程)_微信jsapi支付-CSDN博客

微信公众号-JSAPI支付

1、微信公众号配置

https://mp.weixin.qq.com/cgi-bin/home
① 开通网页授权域名(前置条件:需开通网页授权接口权限)
在这里插入图片描述

②暴露网络授权域名
在这里插入图片描述
③获取基本配置中的AppID、AppSecret
在这里插入图片描述

④微信支付关联商户号
在这里插入图片描述

2、微信支付配置

https://pay.weixin.qq.com/
① 配置API证书 获取证书序列号
在这里插入图片描述
②获取正式序列号
在这里插入图片描述
在这里插入图片描述

③设置APIV3秘钥
在这里插入图片描述
④ 产品中心—开通JSAPI支付

在这里插入图片描述
⑤添加支付域名配置
在这里插入图片描述
⑥暴露域名
在这里插入图片描述
⑦AppId账号设置-商户关联公众号
在这里插入图片描述

程序配置:

①配置yml文件

wx:
  # 公众号appid
  appId:xxxxxd5381a6
  # 公众号 appSecret
  appSecret: ccccccaff013ebe0eff1
  # 商户号
  mchId: 123456
  # 商户APIV3密钥
  apiV3Key: ccccccccJCcMw466spcSAyV
  # 商户证书序列号
  merchantSerialNumber: cccccccF237C29CC
  # 微信回调地址
  v3PayNotifyUrl: https://xxxx.cn/orderPay/payNotify

② 微信支付平台下载的秘钥证书放入项目resources目录下

pom文件需要引入微信sdk

        <!--微信支付-->
        <dependency>
            <groupId>com.github.wechatpay-apiv3</groupId>
            <artifactId>wechatpay-java</artifactId>
            <version>0.2.12</version>
        </dependency>

在生产预支付订单的解密密钥时候我遇到一个很奇怪的报错

经过各方资料查询需要引入这个版本的包确实解决了
 

        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>1.3.50</version>
        </dependency>

主要流程及代码实现
①前端通过url获取code
(url参数配置)
Appid:公众号的appid
Redirect_uri:重定向至微信支付页面,携带用户openId
Scope:snsapi_base(授权方式 无需弹窗静默授权)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xx&redirect_uri=xxx&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect

②通过前端获取的code,传入指定支付接口(Redirect_uri),获取openId
1)通过appID、appSecret、code构建请求URL,解析返回结果获取openId

可参考微信官方文档:

Vue语法中,实现UniApp中的微信JSAPI支付可以按照以下步骤进行操作: 1. 在需要实现支付Vue组件中,引入微信公众号支付SDK文件。可以通过在`index.html`文件中添加以下代码来引入: ```html <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 2. 编写Vue组件的模板和样式,以及相关的数据和方法。 ```html <template> <div> <!-- 支付按钮 --> <button @click="wxPay">微信支付</button> </div> </template> <script> export default { methods: { // 调用微信JSAPI支付 wxPay() { if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener(&#39;WeixinJSBridgeReady&#39;, this.onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent(&#39;WeixinJSBridgeReady&#39;, this.onBridgeReady); document.attachEvent(&#39;onWeixinJSBridgeReady&#39;, this.onBridgeReady); } } else { this.onBridgeReady(); } }, // 支付回调方法 onBridgeReady() { const payParams = { appId: &#39;...&#39;, timestamp: &#39;...&#39;, nonceStr: &#39;...&#39;, package: &#39;...&#39;, signType: &#39;MD5&#39;, paySign: &#39;...&#39; }; WeixinJSBridge.invoke( &#39;getBrandWCPayRequest&#39;, { "appId": payParams.appId, "timeStamp": payParams.timestamp, "nonceStr": payParams.nonceStr, "package": payParams.package, "signType": payParams.signType, "paySign": payParams.paySign }, function(res) { if (res.err_msg == "get_brand_wcpay_request:ok") { // 支付成功回调 } else { // 支付失败回调 } } ); } } } </script> <style> /* 样式 */ </style> ``` 在上面的代码中,我们通过`@click`事件绑定了支付按钮的点击事件,当点击按钮时会执行`wxPay`方法。在`wxPay`方法中,我们判断`WeixinJSBridge`是否已定义,如果未定义则通过事件监听等待其准备就绪,如果已定义则直接调用`onBridgeReady`方法。在`onBridgeReady`方法中,我们获取支付参数并调用微信JSAPI支付。 请注意替换代码中的支付参数(`payParams`)为实际的支付参数,并根据实际需求处理支付成功和失败的回调。 这样,你就可以在Vue语法中实现UniApp中的微信JSAPI支付了。记得在页面加载时引入微信JSAPISDK文件,并确保支付接口的安全性和正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值