【微信小程序】封装公共支付方法并唤起支付

这篇文章展示了如何在微信开发者工具中处理支付功能。当用户点击支付按钮时,程序通过异步函数调用后端接口获取支付参数,然后使用这些参数调用封装好的`wxPayMethod`进行微信支付。支付成功或失败时,都有对应的回调处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看效果图,微信开发者工具示例

在这里插入图片描述

  1. 调用后端接口获取支付参数
  2. 使用获取的参数唤起微信支付组件
// 支付按钮点击事件
  async handlePay() {
    let openId = wx.getStorageSync('openid')
    // 在这里请求后端接口获取支付参数
    let res = await orderApply({
      openId,
      orderId: this.data.orderId,
      payType: 6,
      payAmount: this.data.orderAmount
    })
    // 这里使用 try catch 的作用就是接收Promise的回调 如果 reject 会直接进入 catch 中
    try {
    // 调用封装的支付方法
      await wxPayMethod(res.data)
      // 成功后执行的事件
      let res_redirect = await checkOrderStatus({ id: this.data.orderId })
      if (res_redirect.code != 200) return wx.showToast({ title: res_redirect.message, icon: 'none' })
      return wx.navigateTo({ url: '/pages/addpatient/index?type=4' })
    } catch (err) {
      wx.showToast({ title: err, icon: 'none' })
    }
},

wxPay.js

export const wxPayMethod = data => {
  return new Promise((reslove, reject) => {
    if (!data) return reject('缺少支付参数')
    let paymentM = { timeStamp: '', nonceStr: '', package: '', signType: '', paySign: '' }
    for (let key in paymentM) {
      if (data[key]) {
        paymentM[key] = data[key]
      }
    }
    wx.requestPayment(
      {
        timeStamp: data.timeStamp,
        nonceStr: data.nonceStr,
        package: data.package,
        signType: data.signType,
        paySign: data.paySign,
        success: res => {
         // 支付成功回调
          return reslove(res)
        },
        fail: err => {
          // 支付失败回调
          return reject(err || '支付失败')
        }
      }
    )
  })
}
### 集成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
发出的红包

打赏作者

前端大斗师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值