uniapp小程序微信支付功能
目录
字段说明
前置工作
获取openid
微信支付
报错问题
uniapp 开发小程序需要实现微信支付功能,下面对相关业务进行说明。
字段说明
AppID:小程序的身份证,微信客户端用来确认你的小程序的身份
AppSecret:小程序秘钥
openid:一个用户对于一个小程序的标识(用户唯一标识),用来确认用户的唯一身份
UnionID:用户在微信开放平台帐号下的唯一标识(小程序绑定开放平台帐号才会有)
session_key:会话秘钥(如果微信API返回加密数据,解密就要用到session_key)
前置工作
要实现支付功能需要做一些前置工作,如果未完成则微信支付不可用。
1,申请微信支付商户号
需要公司来申请,在微信商户平台中。
2,绑定已有商户号并开通微信支付
由小程序管理员开通,在微信公众平台中。
商户与小程序之间的关系:
一个商户可以关联多个小程序,一个小程序也可以绑定多个商户。
对应日常开发,在多商户的情况,每一个商户号在后台都会进行配置,存入数据库,支付时根据当前不同的账户决定使用那一个商户号,这一块需要后台对每一个AppId和商户号做关联,支付时才能确认具体使用那个商户号。(这一块需要后台处理相关逻辑)
配置完成如图:
获取openid
小程序支付必须携带openid,一般openid可以后台获取返给前端,因为考虑安全必须要这么做,如果你需要前端获取openid,如下:
ps:实际上前台是不能获取openid的,一个是考虑安全性因素,还有就是小程序需要添加安全域名,而微信的接口不能放在安全域名中,如下:
当然如果只是前台调试,那么是没有问题的。
1,调用wx.login 接口,获取code
2,根据code,appid,appsecert获取openid
这里默认你已经申请了小程序appid,如果未申请,请看这里,已经申请可以登录微信公众平台查看自己的appid,appsecret,在公众平台,开发管理,开发设置中。
前台获取如下:
wx.login({success: res => {console.log(res.code,'code=====');const appid = 'wx5c*********c7ea0'; // 微信小程序appid const secret = 'a5fd***************ea80c6866dc0'; // 微信小程序secret //调用request请求api转换登录凭证 wx.request({url: 'https://api.weixin.qq.com/sns/jscode2session?appid='+appid+'&secret='+secret+'&grant_type=authorization_code&js_code=' + res.code,header: {'content-type': 'application/json'},success: function (result) {if(result.statusCode === 200) {console.log(result.data.openid,'openid=======');uni.setStorageSync('openid', result.data.openid);uni.setStorageSync('session_key', result.data.session_key);}}}) }
})
如果不清楚openid获取的业务逻辑,请看小程序登录。
如果对小程序支付的整体交互逻辑不清楚的,推荐查看小程序支付。
划重点:openid可由后台获取,前台只需要提供 wx.login 接口获取的 code 即可,剩下工作由后端完成,并在登录接口中返回 openid,前端存储 openid,以便后期使用。
附获取openid时前后台微信服务交互逻辑图:开发者服务器代表后端
微信支付
说明一点,小程序支付的 trade_type 为JSAPI,后端需要关注。
首先你应该调用业务侧接口,即后端接口,获取调用微信支付API所需参数。
调用后端接口这里不做说明,根据具体的业务场景情况不同,获取到支付参数后就可以调用微信小程序的 requestPayment API 调起微信支付,因为开发使用的 uniapp,可以使用 uni.requestPayment API,如下:
// saveReserve 为业务接口
saveReserve(params).then(data => {const { errno, errmsg, res } = data;// res为调起微信支付所需参数if(errno === '0') {// 调起微信支付uni.requestPayment({provider: 'wxpay', // 服务提提供商timeStamp: res.weChatPayData.timestamp, // 时间戳nonceStr: res.weChatPayData.noncestr, // 随机字符串package: res.weChatPayData.package,signType: res.weChatPayData.signtype, // 签名算法paySign: res.weChatPayData.sign, // 签名success: function (res) {console.log('支付成功',res);// 业务逻辑。。。},fail: function (err) {console.log('支付失败',err);}}); }}).catch(err => {console.log(err);})
相关支付API文档请看uniapp支付。
到此微信小程序支付功能完成。
报错问题
1,支付场景非法
--后台需要在创建预支付接口时将trade_type修改为JSAPI模式
2,支付验证签名失败
--需要后台检查生成签名时填写的appid是否正确,一个是小程序appid一个是应用的appid,确保没填错
3,调用支付JSAPI缺少参数:total_fee
--可能是参数有误,注意package参数格式为:"prepay_id=wx20161......"
uniapp小程序微信支付功能相关推荐
- 小程序微信支付功能开发
关于小程序内唤起微信支付功能,不同人有不同的思路,有嵌套H5页面的,也有跳转第三方链接网站的,也有放收钱码等图片的. 今天讲一下微信原生的微信支付功能基础版块,支付页面和支付逻辑. 先上个效果图: 页 ...
- 小程序 php wecahtpay,【PHP】laravel 实现微信小程序微信支付功能
准备工作 准备来laravel框架,下载好 overtrue/laravel-wechat 第三方插件composerrequireovertrue/wechat:~4.0-vvv PHP代码 调用支 ...
- 小程序微信支付功能逻辑
官方的思维图在下看不懂,自己整理一份以备后用. 1.打开Pay付款页面 2.用订单号,查看订单信息前端展示. 3.点击付款按钮,提交订单ID到后台,创建微信预支付交易订单,用JSAPI下单 4.返回创 ...
- PHP完成微信小程序在线支付功能
微信支付现在用到的地方越来越多,从公众号支付,扫码支付一直到现在的小程序支付等等六种快捷支付方式,公司要求开发小程序商城,就只能我上手处理接口支付问题了,使用最常规的第三方模式,第三方帮特约商户申请商 ...
- 调用支付jsapi缺少参数appid_服务商模式下的小程序微信支付
最近,要做一个小程序商城的项目,需要在小程序中用到分账功能,也就是顾客购买商品支付的钱要给各个店铺,这就需要用到服务商模式. 在谈服务商模式下小程序微信支付之前,我们先要有一个服务商的商户号,这个商户 ...
- 小程序微信支付开发流程记录
我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,只有我有开发过JSAPI的微信支付的经验 ...
- 微信小程序收款手续费_小程序微信支付收款流程
大家都知道,小程序具备微信支付功能,但是,很多商家还不知道具体的收款流程是什么?用户在小程序下单支付的款项究竟到了哪里?或者找第三方公司开发担心资金安全问题? 今天给大家详细的讲解一下: 在实现微信小 ...
- 微信小程序 微信支付代码实现流程
微信小程序 微信支付是一个很简单的流程 微信开发文档 地址:wx.requestPayment(Object object) | 微信开放文档 微信公众平台申请支付功能 百度一大堆例举代码 官方文档 ...
- 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...
今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...
最新文章
- matlab平滑曲线_说说地震波的那些事儿(二)——地震影响曲线
- 用@.xxx.cn可实现短域名xxx.cn跳转
- Python学习笔记之基本数据结构方法
- python【蓝桥杯vip练习题库】PREV-52小数第n位(模拟)
- C#回顾 - 3.NET的IO:字节流
- 如何在电脑网页下载准考证
- 关于无线温度监测系统
- lammps自带命令create_atoms实现水分子建模
- python爬虫基本概述
- 光学系统建模之Light Tools安装关键点、教程指引
- 矩阵对角化(Diagonalizing a Matrix)
- 依赖背包dp NOIP2006 vijos 1313 金明的预算方案
- 2023.02.09 草图大师厨房效果图1skp素材效果图
- Flutter 开发中最实用的 Dart 语法知识
- js原生写图片轮播和切换
- 使用Vscode调试vue代码
- 使用Spring JPA中Page、Pageable接口和Sort类完成分页排序
- 语法解析及Antlr
- AWS攻略——Peering连接VPC
- 华硕z97不识别m2固态_华硕主板Z97-A无法识别intel M.2 NVME固态硬盘的解决方法
热门文章
- POJO、PO、BO、DTO、VO的含义以及应用场景
- wetool个人版_wetoo群发wetool与企业-购买
- 三屯河水库库容查询及进库流量计算程序
- 悉尼大学计算机科学本科学费多少,2020年悉尼大学开设了哪些IT专业?学费是多少?入学要求有哪些?...
- SS00026.algorithm——|ArithmeticMachine.v26|——|Machine:项目实战.v03|市场机会点|
- Python爬取Instagram数据Python将图片转化为文字
- python3小项目——爬取智联招聘信息(二)
- webapi json返回值null替换为空字符串
- python学习爬虫之删除无用字符以及空白替换等()
- 【转】91个排名:中国知名个人站长及发家史