1、本地数据库中存放着小程序用户表和微信公众号的表,下面就是向某一个小程序用户推送微信公众号信息
2、在小程序用户表中任意取一个用户A信息,用户A的openId和unionId,通过unionId到公众号表里去检索对应的A用户微信公众号的openId
3、在微信公众号上选择一个模板消息,编辑完要发送的的内容后,再请求发送模板消息的接口
关于微信公众号不能推送的,或者推送报错的,推送的miniprogram下的appid对应的小程序必须是已审核并发布的才可以推送。
推送软件用极光推送,实现多种消息类型,开发者可以轻松地通过极光发送各个移动平台的系统通知,还可以在控制台编辑多种富文本展示模板; 极光还提供自定义消息的透传,客户端接到消息内容后根据自己的逻辑自由处理。
技术栈SpringbootjavaXML(微信在http协议中数据传输方案)MD5签名微信支付术语openid(OpenID是公众号一对一对应用户身份的标识)app_id(公众号id,登录微信公众号_开发_基本配置中获得;)key(收款商户后台进行配置,登录微信商户平台_账户中心_API安全-设置秘钥,设置32位key值;)mch_id(收款商家商户号;)certPath(API证书,登录微信商户平台_账户中心-API安全-下载证书)后端流程
服务端需要的核心操作,总共分为以下几步:
统一下单前端调起微信支付必要参数(需加密)订单结果主动通知(回调接口)查询订单结果结束订单支付接口(关闭订单,支付订单关闭)代码微信总共支持多种语言的sdk,在官网可以下载例子,java程序也可以引入微信支付的sdk包,但是github上的sdk已经很久没有更新了,最好的选择,也是我的选择,在官网上下载sdk项目,将其中所有java类copy到自己的项目中
官网sdk下载目录链接:商户平台首页
微信sdk下载根据微信sdk生成配置类WXPayConfig创建IWxPayConfigclass,继承sdkWXPayConfigclass,实现sdk中部分抽象方法,读取本地证书,加载到配置类中packagecorecomchidoriwxpay;
发起统一下单AND前端调起微信支付必要参数回调结果处理核心是支付订单回调时,需校验加密签名是否匹配,防止出现模拟成功通知
注意点统一下单的签名和后续前端拉取微信支付的签名需要统一,也就是都采用MD5加密,如果2者不同,会导致前端拉取微信支付fail,这是一个巨大的坑,因为这个原因调试了好久,微信在文档里没有明确标出统一下单的签名校验方式需要和前端拉取微信支付的签名校验保持一致微信sdk里的源码需要针对这个问题调整一下,调整如下:WXPay类需要修改下加密判断,在WXPay构造方法中,调整如下
结束语做完以后,微信支付的后端逻辑还是很清晰的,但是在开发过程中很煎熬,不清楚每个专业术语在微信哪里配置,加密方式乱的很