【uni-app微信小程序】实现支付功能

这篇具有很好参考价值的文章主要介绍了【uni-app微信小程序】实现支付功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、说明:

实现微信支付功能需要在小程序后台配置支付相关信息,并且在前端代码中调用微信支付API进行支付操作。好的,uni-app微信小程序实现支付功能整体流程大致如下:

  1. 注册微信公众平台,并完成开发者资质认证;

  2. 在微信商户平台注册商户账号,并完成商户资质认证;

  3. 在商户后台创建支付订单,得到prepay_id

  4. 在客户端调用微信支付API,进行支付请求;

  5. 微信返回支付结果给服务器端,服务器端进行结果验证和订单更新;

  6. 将订单状态告知客户端,支付完成。

二、简单介绍一下每个步骤的细节:

1. 注册微信公众平台

  • 注册地址:微信公众平台 - 申请开通商户号,并对应绑定好微信小程序。

  • 开发文档地址:微信官方文档

2. 注册微信商户平台

  • 注册地址:接入微信支付 - 中添加产品并获取到API密钥、商户号等相关信息。
  • 开发文档地址:微信支付文档

注意: 此商户号,需要由主管及更上级领导进行注册,会成为公司收款账户(不是由前端程序员注册!!!不是由前端程序员注册!!!不是由前端程序员注册!!!

注册非常简单,重点是需要提供企业资料,一般程序员没有权限获取这些材料,所以需要由上级注册

企业注册需要材料:营业执照对公银行账户信息法人身份证

3. 创建支付订单,请求后端接口,获取orderInfo

这里进行说明 orderInfo完全是后端返回的,前端不做任何处理
所以orderInfo有问题推给后端,前端不用浪费时间, app的支付不管ios还是android都是string类型

微信orderinfo格式   
 "{\"appid\":\"xxxxxxxx\",\"partnerid\":\"xxxxxxx\",\"prepayid\":\"xxxxxxxxxxxxxxxx\",\"timestamp\":\"1579779903\",\"noncestr\":\"xxxxxxx\",\"package\":\"Sign": "WXPay\",\"sign\":\"xxxxxxxxxxxxxxxxxxxx\"}"  

在这里我们简单举一个例子,以Node.js为例,后端代码可能如下所示(变量不是很全,各位后端自己看着改):

const wxpay = require('node-weixin-pay');
const config = {
  appid: 'your appid',
  mch_id: 'your merchant id',
  partner_key: 'your partner key',
  pfx: fs.readFileSync('path to your p12 file'),
};
const payment = {
  body: 'Your order description',
  out_trade_no: 'Your order number',
  total_fee: 1,
  spbill_create_ip: 'Your ip address',
  notify_url: 'Your notify url',
  trade_type: 'JSAPI',
  openid: 'Your openid',
};
wxpay.getBrandWCPayRequestParams(payment, config, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    // 返回给前端的支付参数
    const orderinfo = {
      appId: result.appId,
      timeStamp: result.timeStamp,
      nonceStr: result.nonceStr,
      package: result.package,
      signType: result.signType,
      paySign: result.paySign,
    };
  }
});

其中,node-weixin-pay是用来对微信支付进行封装的第三方库,具体使用方法可以参考其官方文档。
上述代码中,需要使用你的 appidmch_idpartner_key等参数,这些参数是你自己在注册微信支付时所获得的。我们将 payment 对象传递给 getBrandWCPayRequestParams() 方法,并带上 config 对象,该方法会返回一个 加密后的订单信息(即orderInfo)。
最后,我们将加密后的订单信息返回给前端,前端页面拿到该信息后即可使用微信支付API,向微信服务器发送请求,完成支付流程。

微信支付统一下单接口返回的支付参数包含以下含义(重要!!!):

  • appid:小程序或公众号的AppID
  • partnerid:商户号
  • prepayid:预支付交易会话标识
  • noncestr:随机字符串,不长于32位
  • timestamp:时间戳,表示当前时间,格式为yyyyMMddHHmmss
  • package:统一下单接口返回的prepay_id参数值,此处将其赋值给package,是客户端调起微信支付时的必要参数
  • sign:签名,通过签名算法计算得出,用于验签支付结果是否合法。

在客户端调起微信支付时,需要将以上参数传递给微信支付API发送请求完成支付。

4. 调用微信支付API

在客户端调用微信提供的wx.requestPayment方法,需要传入如下参数:

  • timeStamp: 时间戳,自1970年以来的秒数

  • nonceStr: 随机字符串,不长于32位

  • package: 统一下单接口返回的prepay_id参数值,格式为prepay_id=xxx

  • signType: 签名算法,目前支持HMAC-SHA256和MD5,默认使用MD5

  • paySign: 签名

第三步、第四步一起的示例代码:

uni.request({
  url: '你们公司的后端接口地址,获取支付核心数据',
  method: 'POST',
  data: { 接口需要什么参数就传给接口,包含扣款金额,订单id等 },
  success(obj) {
    
 
    //调用微信官方支付接口弹出付款界面,输入密码扣款
    wx.requestPayment({
      timeStamp: obj.xxxx.timeStamp,  //后端返回的时间戳
      nonceStr:  obj.xxxx.nonceStr,   //后端返回的随机字符串
      package:  obj.xxxx.packageValue, //后端返回的prepay_id
      signType: 'MD5', //后端签名算法,根据后端来,后端MD5这里即为MD5
      paySign:  obj.xxxx.paySign,  //后端返回的签名
      success (res) {
        console.log('用户支付扣款成功', res)
      },
      fail (res) { 
        console.log('用户支付扣款失败', res)
      }
     })
 
  }
})

以上就是前端实现微信支付功能的基本步骤,需要注意的是,在实际开发中,还需要考虑支付安全、支付异常情况等问题。同时,建议开发者使用uni-app官方提供的微信支付插件来减少开发成本和难度。

5. 验证支付结果和更新订单状态

在微信回调服务器通知支付结果后,服务器需要进行结果验证和处理订单状态。具体步骤如下:

  • 将收到的xml转化为数组,验证签名是否一致;

  • 判断支付结果中的return_coderesult_code是否都为SUCCESS

  • 根据out_trade_no查询订单信息,判断订单状态;

  • 更新订单状态为已支付/支付失败。

6. 支付完成

将支付结果告知客户端,客户端根据支付结果进行相应的页面跳转处理。文章来源地址https://www.toymoban.com/news/detail-539808.html

到了这里,关于【uni-app微信小程序】实现支付功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app跨端开发H5、微信小程序、支付宝小程序遇到的坑

    1.checkbox样式

    2024年02月11日
    浏览(50)
  • uni-app map路线轨迹回放功能及turf.js实现缓冲区渲染(微信小程序)

    使用uni-app中 map组件实现路线轨迹回放功能。  1、通过接口获取返回的轨迹点。 2、地图的坐标系与轨迹点的坐标系要保持一致,否则轨迹有偏差。点经纬度转换,wgs84togcj02 =》js工具类合集(utils.js) 3、绘制开始结束点,设置地图经纬度。 4、polyline,绘制路线点,属性:[

    2024年02月11日
    浏览(42)
  • uni-app Vue3实现一个酷炫的多功能音乐播放器支持微信小程序后台播放

    本文存在多张gif演示图,建议在 wifi 环境下阅读📖 最近在做网易云音乐微信小程序开源项目的时候,关于 播放器功能 参考了一些成熟的微信小程序,如 网易云音乐小程序 和 QQ音乐小程序 ,但是发现这些 小程序端 的播放器相对于 APP端 来说较简单,只支持一些基础功能,

    2024年01月24日
    浏览(54)
  • uni-app微信小程序分享微信好友与分享到朋友圈功能【vue3+ts+uni-app+vite】

    微信小程序开发结束之后,点击右上角三个点显示: 1、创建share.ts文件 2、全局使用, 在 main.ts 里面 添加全局的 mixin 这样配置结束之后整个小程序所有页面点击右上角转发分享都走的这个文件,如果需要单个页面可以转发,可以看第三点 3、在需要的页面进行调用就行啦 a.

    2024年02月14日
    浏览(44)
  • uni-app/微信小程序 分享功能(开启右上角分享)@令狐张豪

    end~~~ 如有错误或观点不一致的请评论留言共同讨论,本人前端小白一枚,根据自己实际项目遇到的问题进行总结分享,谢谢大家的阅读! 文章对您有所帮助请给作者点个赞支持下,谢谢~

    2024年02月15日
    浏览(35)
  • uni-app中实现微信小程序/公众号订阅消息推送功能

    👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是全栈 IT 工程师摘星人 欢迎分享 / 收藏 / 赞 / 在看! 开发业务时时常遇到需要向用户发送一些通知,如欠费通知、会员到期通知等等。

    2024年02月02日
    浏览(107)
  • uni-app 微信小程序 支付宝小程序(alipay) 百度小程序(baidu),预览pdf(链接和base64) 及下载(仅微信),window.open uni.downloadFile

    废话不多说直接上代码吧 之前搜了一大堆有的没的,最终还是小伙伴巴拉文档一起找到的方案(离不开小伙伴的帮助,自己总容易陷入死局,在此鸣谢 疾风李青!); 想起个事:一定要给这些路径的域名配到相应的开发管理上,其他平台不过多赘述了 首先是预览,由于我这

    2024年02月15日
    浏览(40)
  • 微信小程序一键登录功能,使用uni-app和springboot(JWT鉴权)

    目录 概述 微信登录接口说明  关于获取微信用户的信息 前端代码(uni-app) 后端代码(SpringBoot) 配置文件:application.yml  配置文件:Pom.xml  类:WeChatModel    类:WeChatSessionModel  类:UserInfoController 业务层实现类:UserInfoServiceImpl 工具类:JWTUtils 拦截器配置-自定义拦截器

    2024年02月09日
    浏览(62)
  • 摇骰子设计与实现(uni-app微信小程序)

    手机摇一摇可以摇骰子,上划可查看结果,震动加声音等功能。 本章底部会贴出所有代码 ,图片资源以及音频资源很简单,自己找一下就行了。 已经上线小程序,可以扫码直接预览效果。 新建一个项目,将已经准备好的资源,放入到项目中。下面是需要资源图片的示例。

    2024年02月12日
    浏览(42)
  • 微信小程序canvas实现简易手写签名版(uni-app)

    微信小程序可以通过canvas实现手写签名的效果,本文中使用的是微信小程序Canvas 2D接口 本示例中绘制的是横屏签名的效果,效果图如下: 这里我们需要调整canvas的物理宽高,默认物理宽高为300*150px,物理宽高调整通过css样式即可,本文中需要根据屏幕高度进行动态调整,使

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包