php支付走过的坑(微信篇 包含h5支付和app支付 注册 秘钥 环境等等配置)
支付这东西,说容易也容易,说难也难
代码这玩意还比较好说 但是 如果没有demo 直接去看官方文档
十有八九一脸懵逼 今天就整理一下 支付这块走过的坑 涉及 微信h5支付 支付宝h5支付
(api文档真的是给人类看的么 手动滑稽)
微信h5支付
一、支付账号申请
既然说是h5支付 那就要走手机网页
需要申请 微信公众号 和 微信商户号(相关材料注册时会提示)
此处有坑
微信商户号的注册地址不知为何 放的有点隐蔽
商户平台首页 -》 右上角帮助中心-》自助服务专区-》申请接入教程(新版)-》接入指引-》微信支付商户接入指引
-》找到立即申请 点击就可注册
放的这么里面 以至于 好几次都没发现
另外 开通h5支付 不需要去注册微信开放平台 因为开放平台的网页应用只涉及微信登录
此外 微信公众号的支付功能也不需要开通 只需要开通商户 绑定公众号的appid即可
二、支付环境配置
支付环境需要在商户平台配置
首先开通产品大全下的支付产品

接着 去账户中心下的api安全配置

配置key
此处有坑
版本比较早的 Chrome 可能无法安装腾讯的安全控件 切换到ie环境即可
最后去产品中心查看appid是否和公众号的appid绑定

三、支付代码
腾讯的h5支付没有sdk 验证 加密 验签 都需要自己来写
文档写的还算比较全
但是 还是有几处坑
支付完成的同步跳转(支持get形式传参) 正经的统一下单api接口没有提到
只是在开发步骤和常见问题里面提了一下
一、回调页面 正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面。 如,您希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理: 假设您通过统一下单接口获到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096 则拼接后的地址为MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn 注意:
1.需对redirect_url进行urlencode处理 2.由于设置redirect_url后,回跳指定页面的操作可能发生在:
1,微信支付中间页调起微信收银台后超过5秒
2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示效果可参考下图
但是由于同步跳转无法判断用户是否支付完成
必须要手动让用户触发查单的申请

统一下单接口的sign生成也需要注意按照官方的排序和规则走
提供下面这个官方的工具 支持验证sign是否生成正确
微信公众平台支付接口调试工具
四、支付回调
回调也是需要验证 sign 也就是把官方给的xml数据去除sign 处理后 生成新的sign 对比是否合法即可
此处有坑
微信支付的金额都是以分为单位
sign验证时 注意转成大写
五、支付持续回调
支付持续回调需要在验证完数据之后 打印
return sprintf("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>");
即可停止
微信app支付
app支付和h5支付相比 改变了些许参数 详细参数 统一下单文档
此处有坑
签名部分改动较大 从h5的签名一次 改为签名两次 且参数固定
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3 /**步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay**/
后面的步骤就是app去处理 以及处理回调信息了
不管支付回调验证成功与否 记得保存回调日志
php支付走过的坑(微信篇 包含h5支付和app支付 注册 秘钥 环境等等配置)的更多相关文章
- php支付走过的坑(支付宝篇 注册 秘钥 环境等等配置)
支付这东西,说容易也容易,说难也难 代码这玩意还比较好说 但是 如果没有demo 直接去看官方文档 十有八九一脸懵逼 今天就整理一下 支付这块走过的坑 涉及 微信h5支付 支付宝h5支付 (api文档 ...
- 微信小程序笔记<三>入口app.js —— 注册小程序
小程序开发框架在逻辑层使用的语言就是JavaScript,所以想玩小程序JavaScript的基本功一定要扎实.但小程序基于js做了一些修改,以方便开发者更方便的使用微信的一些功能,使得小程序更好的贴 ...
- 微信浏览器内 h5 直接唤醒 app 之 微信开放标签 wx-open-launch-app
以前微信浏览器内想要直接唤醒 app 要么接微信的应用宝要么你是腾讯的干儿子. 而在微信在2020年5月分推出了“微信开放标签”功能 wx-open-launch-app 用于微信浏览器内直接唤醒 a ...
- 拼多多(7pdd)微信跳转h5页面打开app跳转任意url关注技术weixin://dl/business/?ticket
拼多多微信跳转接口利用了微信官方的weixin://dl/business/?ticket技术,此类接口可以在官方接口中找到,分析代码如下: <title>拼多多</title> ...
- 微信支付遇到的坑---缺少参数total_fee
今天在做微信砍价成功后支付,出现了这个报错 看到报错后,去找total_fee这个参数,调试了半天,total_fee是确定有值的 微信支付的步骤 ① 预支付 商户号,商户秘钥,appid,appse ...
- 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)
本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...
- APP支付报错ALI40247处理方案!
简直日狗!这里要吐槽支付宝: 1.支付宝文档太复杂,分类虽然详细,但是我找不到app支付 对应服务端的demo 2.提供下载的sdk都是全整合的 用下来都是一条龙服务,还有一些客户端(app)的请求也 ...
- 支付宝APP支付之Java后台生成签名具体步骤
/** *支付宝支付 * @param orderId 订单编号 * @param actualPay 实际支付金额 * @return */ private String getOrderInfoB ...
- 支付宝 app支付 沙盘使用
文档说明 沙箱测试: App支付沙箱接入注意点 1.app支付支持沙箱接入:在沙箱调通接口后,必须在线上进行测试与验收,所有返回码及业务逻辑以线上为准:2.app支付只支持余额支付,不支持银行卡.余额 ...
随机推荐
- phaser小游戏框架学习中的屏幕适配
这篇博客主要讲一下上一篇博客的右侧和底部出现的问题.就是页面会有偏移量.说一下这个产生的原因吧. 一开始在构建html页面的时候,习惯性的在页面中加了 <meta name="view ...
- 用rc.local工具开机自启动
对于一些程序来说,无法直接开机自启动.那么我们可以利用开机自启动来执行一些命令,达到开机自启动的效果!!! 下面用tomcat来举个例子 tomcat启动的命令一般是./startup.sh 那么我们 ...
- spring boot app
一个demo 可以参考一下 AppConfig @Configuration @ComponentScan(basePackages = { "org.whm.test" }) ...
- hau 1870 愚人节的礼物(栈)
愚人节的礼物 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- idea(2)快捷键
Ctrl+E:最近编辑文件 Ctrl+J:自动代码快捷 Ctrl+N:查找类 Ctrl+U:大小写转换 Ctrl+F12:outline Alt+1:全屏 Alt+F1:类定位到左侧目录 Alt+In ...
- d题
#include<iostream>#include<algorithm>using namespace std;int a[200005];int b[200005];int ...
- Jenkins安装过程
1.安装环境 配置java环境 安装Tomcat 2.将Jenkins.war 包放入Tomcat的webapps目录 3.启动tomcat后,tomcat会解压war包,生成一个jenkins文件夹 ...
- php数组·的方法3-数组指针
/* * 数组指针函数 * */ //key() current() 指针一直停在第一位 不会下移 echo '<hr>'; $arr5 = array('name' => 'hxq ...
- 【ACM】Knapsack without repetition - 01背包问题
无界背包中的状态及状态方程已经不适用于01背包问题,那么我们来比较这两个问题的不同之处,无界背包问题中同一物品可以使用多次,而01背包问题中一个背包仅可使用一次,区别就在这里.我们将 K(ω)改为 K ...
- java——arr == null || arr.length == 0
这两者是不同的: arr == null; int[] arr = null; arr.length == 0; int[] arr =new int[0];