微信小程序接入微信支付流程

一、基本介绍

1、支付场景:点击支付按钮唤起微信支付弹窗,输入正确密码后完成支付。
2、基本流程:点击支付按钮首先生成一个订单,然后在后端调用微信api接口进行统一下单,将接口返回的数据回传到前端拉起支付操作,然后异步通知支付结果。

二、配置信息

1、微信公众平台配置

点击功能 – 微信支付,关联一下注册好的微信商户平台
在这里插入图片描述

1、微信商户平台配置

(1)设置证书和密钥
登录微信商户平台,点击账户中心 – API安全,设置证书和两个密钥(此处两个密钥设置为相同的。
在这里插入图片描述(2)申请JSAPI支付
①点击产品中心 – 我的产品 ,点击申请JSAPI支付。
在这里插入图片描述②填写支付授权目录
开发配置中需要填写支付授权目录(后端服务器域名)
在这里插入图片描述

三、编码实现

1、获取用户的openId

必须要有微信用户的openid才可以唤醒支付功能。openid由微信公众号提供,是对于消费者微信产生的唯一用户身份标识。
获取方法:https://blog.csdn.net/m0_46613429/article/details/125868514

2、获取prepay_id和支付签名验证paySign

商户在小程序中先调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付。
(1)调用接口生成预支付订单拿到订单id

orderInsert(data).then(res => {
  if (res.data.code === 1) {
     this.getPayInfo(res.data.data.id)
   } else {
     wx.showToast({
       title: res.data.msg,
       icon: 'none'
     })
   }
})

(2)通过订单id调用接口获取用户支付所需参数

getPayInfo(id) {
  unifiedOrder({id}).then(res => {
		if(res.data.code === 1) {
			this.payMoney(res.data.data)
		} else {
      wx.showToast({
         title: res.data.msg,
         icon: "error"
       })
     }
  }
}

(3)通过wx.requestPayment方法调用起支付功能
在这里插入图片描述

payMoney(moneyData) {
	wx.requestPayment({
      timeStamp: moneyData.timeStamp,
      nonceStr: moneyData.nonceStr,
      package: moneyData.packageValue,
      signType: moneyData.signType,
      paySign: moneyData.paySign,
      success(res) {
        
      },
      fail(res) {
        wx.showToast({
          title: "支付失败!",
          icon: "error"
        })
      }
   })
}

四、流程总结

(1)小程序获取微信openId以及订单号传给后台
(2)后台根据openId和订单号进行签名post微信统一下单接口
(3)后台获取微信返回的xml字符串解析二次签名后返回给前端
(4)前端调起微信支付API

### 集成Java版微信支付SDK到微信小程序 #### Maven依赖引入 为了能够顺利集成微信支付功能,在项目中需加入`wechatpay-java`库作为依赖。这可以通过Maven来完成,具体版本号可以根据实际需求调整。 ```xml <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> <version>0.2.11</version> </dependency> ``` 此部分配置确保了开发者可以利用该库所提供的方法简化与微信服务器之间的交互过程[^2]。 #### 资源文件配置 在应用启动之前,应该先准备好所有必需的参数设置,比如商户ID、API密钥以及其他可能涉及到的安全凭证等信息。这些敏感数据通常不会直接写死在代码里而是放在外部配置文件中以便管理和维护。 对于沙盒测试环境而言,则可通过如下方式初始化: ```java import com.github.wxpay.sdk.WXPay; import com.github.wxpay.sdk.WXPayConstants; public class WXPayExample { public static void main(String[] args) throws Exception { MyConfig config = new MyConfig(); WXPay wxpay = new WXPay(config, WXPayConstants.SignType.MD5, true); // 这里的true表示启用sandbox模式 } } ``` 这里需要注意的是当切换至生产环境时应将最后一个布尔型参数改为false或者干脆省略不填,默认情况下即代表正式环境[^3]。 #### 实现支付逻辑 针对不同场景下的支付请求(如H5页面内嵌支付、PC网页扫码付款以及原生的小程序内部调起),虽然前端展示形式有所区别但是后端处理流程大同小异。主要工作集中在组装交易订单详情并向微信提交预支付申请;之后再把返回的数据封装好反馈给客户端用于唤起对应的支付界面[^1]。 ```java // 假设这是某个服务类中的一个方法用来发起一笔新的支付 Map<String, String> unifiedOrder(Map<String, Object> orderInfo){ try{ Map<String, String> reqData = buildRequestParams(orderInfo); // 构建请求参数 // 发送统一下单请求 Map<String, String> respData = wxpay.unifiedOrder(reqData); if ("SUCCESS".equals(respData.get("return_code")) && "SUCCESS".equals(respData.get("result_code"))) { // 处理成功后的业务逻辑... return generateFrontEndNeed(respData); // 返回前端所需的信息结构体 }else{ throw new RuntimeException("Unified Order Failed"); } }catch(Exception e){ logger.error(e.getMessage(),e); throw new RuntimeException("Error occurred during payment process."); } } private Map<String,String> buildRequestParams(Map<String,Object> orderInfo){ // 组织发送给微信的服务端所需的各项字段 ... } private Map<String,String> generateFrontEndNeed(Map<String,String> responseData){ // 将响应转换为适合前端使用的格式 ... } ``` 上述伪代码展示了如何通过调用微信提供的统一收单接口创建一个新的待支付项,并且妥善地向应用程序其他模块传递必要的状态更新通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值