① H5在微信小程序及公众号中的支付
为了解决在公众号支付和在小程序中支付问题,写了个js工具文件,根据当前环境执行不同的支付方法(以小程序支付流程为主)
在小程序支付中,需要注意两个地方,第一是由于package='prepay_id=XXX'传到小程序时会导致数据接收不完全,所以就只传XXX,‘prepay_id=’由小程序那边拼接上了;第二点是‘/pages/Pay/Pay’是与小程序约定的处理支付功能的页面,需要对应着。
在需要调用的文件用引入【import {payTool} from './PayTool.js';】,并在获取订单信息后,传入订单信息,发起支付流程【payTool(payParam);】
在小程序中获取订单信息
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7
根据微信小程序支付说明文档使用接收的参数调取支付功能
2020.12.24补充
刚学到还有个qs可以用,,,
1、npm install qs
2、var qs = require('qs')
3、不需要对package进行修改,直接传参即可。 小程序那边也不需要再处理了
② 微信小程序支付API
2019年12月26日
文档:
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7
一.一般要开发的两个接口
1.统一下单
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
2.申请退款
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_4
3.签名规则
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
二.小程序支付时序图
关键就是wx.requestPayment(object)
2.ps商户系统和微信支付系统主要交互:
1、小程序内调用登录接口,获取到用户的openid,api参见公共api【 小程序登录API 】
2、商户server调用支付统一下单,api参见公共api【 统一下单API 】
3、商户server调用再次签名,api参见公共api【 再次签名 】
4、商户server接收支付通知,api参见公共api【 支付结果通知API 】
5、商户server查询支付结果,api参见公共api【 查询订单API 】
三.微信小程序支付实现步骤
1.获取登录凭证code 并传给后端服务器
2.后端服务器请求微信服务器获取openid和session_key,并将openid返回给小程序
3.小程序客服端发起支付请求给后端服务器 (带上openid参数)
4.后端服务器接收到openId后,调用微信支付统一下单接口(后端调用的,用来给小程序获取支付参数)
5.拿到后端服务器返回的5个参数后,调用最终支付接口wx.requestPayment
6.微信服务器进行支付成功后,通知后端服务器。
③ 微信小程序怎么开发微信的支付功能
您好!很高兴能为您解答, 1、申请微信支付。小程序认证以后,可以在小程序后台,微信支付菜单栏,申请微信支付。填写企业信息和对公账户,微信支付会打一笔随机金额到对公账户,输入金额完成验证后,在线签署迁移,即完成了微信支付的申请流程。
微信支付申请完,会发送微信支付商户号,商户平台用户名密码等信息到注册者邮箱。
2、配置小程序密钥。小程序后台设置页,点击生成,管理员验证二维码后,会随机生成AppSecret。请妥善保管好Appsecret,不要明文存储于服务器,AppSecret用于和微信服务器交互。比如获取用户的openid接口就需要用到.
3、设置密钥和下载证书
用申请微信支付获得的用户名和密码,登录商户平台 ,在账户中心,API安全中下载证书和设置密钥。
密钥是32位,设置以后需要妥善保管,因为无法查看密钥,所有微信支付相关的接口都会使用这个密钥加密。
4、配置HTTPS服务器 小程序的前端是使用微信提供的框架开发,但是后台依然是开发者自己的服务器。小程序发起的是HTTPS请求,意味着小程序开发者必须配置HTTPS服务器。配置HTTPS服务器之前,先要获取证书,证书可以向相关机构购买,腾讯云目前可以向用户提供免费的证书
5、微信支付流程
微信支付有多种支付方式,包括刷卡支付,公众号支付,扫码支付,APP支付,所有微信支付的接口都可以到官方找到。小程序是在微信里调起支付的,其实是公众号支付
④ 在微信小程序中如何实现支付及退款
1.前提:要以公司的以身份去注册一个小程序,才有微信支付权限;绑定商户号;在小程序填写合法域(支付域名)
二、完成以上条件,你可以得到
“小程序appid 小程序秘钥 ” 这两个用于获取用户openid;
商户号id ,商户号秘钥 支付接口必须的;
支付。第一步 调取微信接口获得统一下单号 就是告诉微信我要收openId为XX的人多少钱
第二步换算签名(参考文档) 第三部 前端 开启支付 回调用户是否支付 前端支付了 提示用户支付成功(此时不一定支付成功了) 第4部 后台回调地址接受到微信支付成功的XML 成功了 执行你的逻辑
退款需要支付证书 开通商户自己下载 直接调取API搞就完事
⑤ 小程序支付怎么改成web支付
步骤如下:
1,定义web显示h5页面。2,定义h5页面,因为是本地链接,所以需要到开发者工具里把不检验合格域名这一栏勾选上。3,编写h5代码,要与小程序保持页面一致。4,编写小程序支付页。
到这里我们就完整的实现了小程序we展示h5页面,并且做到了h5和小程序的交互,实现了小程序web的支付功能。
⑥ 微信小程序怎么内嵌网页实现支付
内嵌网页中可使用JSSDK 1.3.0提供的接口,可坑就来了,居然不支持支付接口的调用,经过一番研究,总算打通了两边的交互。
大概流程
1、先说明涉及到的文件,下面会用到
1.1 app.js:小程序的app.js文件,在globalData里定义一个全局变量paySuccessUrl: '',用来保存支付成功跳转url
1.2 wxminiwebview.js:小程序中放web-view的界面 1.3 wxminipay.js:小程序原生支付界面
1.4 web_pay.vue:内嵌网页会调起支付的路由组件界面,由于我是用vue+vue-router写的,所以你最好了解下vue和vue-router,记得引入微信jssdk1.3.0,最新版本才包含小程序相对应方法。很遗憾,微信并没提供npm包,github有人提供的commonjs引入方式的微信jssdk版本也只有1.2.0,所以就只能这样引入了。
<script src="./static/jweixin-1.3.0.js">script>
2、首先我们像官网那样正常嵌入一个内嵌网页,url是wxmini_webview.js中data中定义的变量,webview加载的就是网页就是这个url。
<web-view src="{{url}}">web-view>
3、在内嵌网页web_pay.vue里判断当前是否是微信环境。
window.wx.ready(function () {
isWxMini = window.__wxjs_environment === 'miniprogram'
})
4、在内嵌网页web_pay.vue调用支付时把支付金额,支付说明,支付成功跳转url...(任何你想要的参数,记得encodeURIComponent),传给小程序原生页面。
if (isWxMini) {
let jumpUrl = encodeURIComponent(window.location)
let path = `/page/pay/pay?amount=${amount}&title=${desc}&jumpUrl=${jumpUrl}`
window.wx.miniProgram.navigateTo({
url: path
})
}
5、在小程序支付界面wxmini_pay.js里获取到内嵌网页传过来的值,这里演示方便,实际上是在page的data里存储这些会显示在界面的值好些。
onLoad: function (options) {
console.log(options)
// 获取网页传过来的值
// TODO 用es6解构来获取值TODO
jumpUrl = options.jumpUrl
amount = options.amount
title = options.title
...
},
6、支付成功后,把跳转url附带支付结果及当前时间保存到全局变量。
paySuccess () {
let currentTime = new Date().getTime()
//这是为了防止wxmini_webview.js文件里调用setData由于前后两个url一致导致路由不触发刷新的bug
jumpUrl = options.jumpUrl+encodeURIComponent(`?payResult=1&time=${currentTime}`)
//payResult=1表示支付成功,这里我偷懒了直接在url后面补?,实际情况比较复杂
//为了实现支付成功返回后的无刷新加载,这里的参数应该是属于路由web_pay.vue的,而不是属于window.location.search的
//所以要判断路由锚点#的位置和是否已经有路由参数(如果是vue-router的history模式我没用过,应该和window.location一样吧)
getApp().globalData.paySuccessUrl=jumpUrl //保存跳转url到小程序全局变量里
wx.navigateBack() //返回会上个页面,也就是承载网页的容器页面wxmini_pay.js
}
7、回到小程序wxmini_webview.js,会触发onshow,在里面进行界面无刷新加载。
onShow: function () {
console.log('on show')
let paySuccessUrl = getApp().globalData.paySuccessUrl
getApp().globalData.paySuccessUrl="" //清空支付成功url,防止一些操作触发onShow事件
if (paySuccessUrl) {
let url = decodeURIComponent(paySuccessUrl)
this.setData({
//这里在次说明下步骤6中的&time=${currentTime},就是因为不加这个当你第一次支付成功回来这里
//这个url跟你第二次支付成功回来这里是一样的,会导致第二次支付开始,这里的setData方法失效
url
})
}
},
8、步骤7中的setData会触发webview中的网页加载,由于我采用的是vue-router,而且前后两个url只有路由的参数query不一样,所以并不会触发界面刷新,也不会触发路由的重新加载,而是只会触发beforeRouteUpdate 这个方法,举个例子,现在支付前界面是https://host/#/pay,然后支付成功后跳转https://host/?payResult=1&time=123456#/pay,此时界面不会刷新,pay路由也不会重新加载,而是触发beforeRouteUpdate (to, from, next),你要做的只是在这里界面解析to.query里的数据,然后该干嘛干嘛
beforeRouteUpdate (to, from, next) {
console.log('路由发生改变,很有可能是小程序的支付成功回调')
let payResult = to.query.payResult
if (payResult) { // 小程序支付成功
if (payResult === '1') {
console.log('支付成功,下班打卡走人')
}
}
next()
},
⑦ 个人注册的微信小程序如何实现微信支付,是通过第三方平台还是通过别的途径求详细说明
注册微信程序关联微信支付就可以,都是通过微信平台支付,现在三大支付平台就是微信,支付宝,云闪付
⑧ 商家小程序获取信息后支付不了收获地址的支付功能
商家小程序获取信息后支付不了收获地址的支付功能这样处理:
1、确认小程序已经申请开通支付功能且开通或绑定商户号。
2、确认用户的openid和appid是对应的。
3、支付回调需要再次签名验证。
4、小程序通过wx.requestPayment来调起微信支付,在success方法里可以实现支付成功后页面自定义跳转。