微信提供了很多支付产品,本文就我实际开发中用到的支付产品讲解一下:支付宝支付、支付宝(扫码支付)、H5支付、小程序支付。微信提供了各种支付方式,只要了解了一种,其他的支付方式就没太大区别了。
无论使用哪种支付方式,都需要调用统一接口:微信支付统一下单接口:
支付流程:首先用户在应用内下单(也就是点击支付),此时请求会发送到后端,后台进行下单,生成订单号等处理。后台会调用微信统一下单接口API,此时会传入一系列的参数,微信会返回一些参数给我们,还有交易链接等信息,后台会把这些返回的信息返回给前端,前端根据交易链接或者其他信息生成支付二维码或者调出微信支付,输入密码即可完成支付。用户的支付成功之后会进行异步通知,微信会把支付结果发送到配置的回调地址,也可以我们主动调用支付结果查询API接口查询支付状态。
这是无论什么支付类型都需要用到的支付流程,但是每种支付又都有些细微的差别,下面我就重点说说每种支付前的相关配置,以及我支付时需要注意的一些问题,其中比较麻烦的就是支付。
支付:
1.在支付之前,您需要配置各种参数以确保支付成功,其中支付尤为麻烦:
在微信支付商户后台配置公众号关联,请进入产品中心-账户管理-点击关联添加同品牌公众号并提交,此时关联状态为审核中
2.在微信支付商户后台进行“开发配置”,配置支付回调地址或者支付域名。支付需要配置支付域名,可配置多个支付域名。产品中心-开发配置。
3、如果你配置了关联公众号,你需要先登录公众号管理后台同意小程序关联公众号的请求。
4、因为支付需要先授权,所以需要配置网页授权域名,开发支付的时候需要在统一下单接口进行用户传输,采集需要在公众平台设置采集的域名,只有设置过的域名才是有效的采集域名,否则采集会失败。
此时需要下载txt文件放到开发服务器上,需要能根据域名从外网访问到才可以点击“确认”,否则无法点击,至此,所有需要的配置就完成了。
2.用户同意授权,获取code,此时采用的是“静默授权”,即用户不知道的授权。
关联:#
参数:公众账号较早标识
:重定向的url是授权后需要重定向的页面
:申请授权范围
:不弹出授权页面,直接跳转,只能获取用户
:弹出授权页面,获取昵称、性别、所在地
:重定向后的参数
静默授权后,将生成一个代码,该代码仅5分钟内有效。
3、需要付款,所以调用“统一下单”接口前需要获取的值是通过上一步的code交换获得的:
请求参数:,,CODE,
请注意: 和 是微信公众号的ID和密码,而不是商户后台的ID和密码。
4.获取后即可调用“统一下单”接口
微信提供的API地址为:
关联:
网址:
URL地址:(备用域名)查看跨城容灾方案
是否需要证书:否
请求参数:
微信统一点餐接口返回参数,具体请查看文档。
这里我使用了微信官方文档中提供的SDK和DEMO下载,直接下载下来放到项目中,里面封装了一些方法,但是因为使用了微信官方文档中的SDK,所以没有发现一些隐藏的问题,导致调试了好久才调试成功支付。
问题:
1.发起支付时总是报“支付验证签名失败”的问题?
原因:我用的是微信官方文档自带的SDK和DEMO,生成签名的时候也用了默认签名,没有重新生成签名,导致没有“时间戳”字段,生成的签名Map中的值也多于正常值,最终导致“支付验证签名失败”。
解决方案:前端需要根据后端传递的sign签名进行“二次签名”才能调用微信支付,所以后端生成签名时需要保持必填字段及字段名一致,才能“验签成功”。
例如:前端如果使用如下方法调用支付,那么后端生成签名的时候也需要这些参数,并且生成签名是区分大小写的。
后端:生成签名,需要10位时间戳
至此:前后端签名验证成功,可以成功发起支付。
H5支付,付款方式:
1.配置时,H5支付配置中填写支付域名,支付配置中填写支付回调即可。产品中心-开发配置中设置
2.调用“统一下单”接口
H5支付:调用统一下单接口时,交易类型=MWEB,此时会返回一系列参数,前端会根据这些参数来调用支付,之后用户只需要输入密码即可完成支付。
返回参数:
这是H5支付返回前端的路径,前端可以处理并发起支付。
支付:调用统一下单接口时,设置交易类型=即可。
返回参数:
支付时会返回二维码图片到前端,显示后即可扫码支付。