停车免密支付功能的开发 首先我们需要做的是申请微信商户号并开通微信代扣
场景图
前端功能开发:
车辆进场
车辆入场,停车场将用户车牌信息传给小程序。小程序根据车牌信息查询用户是否开通微信免密支付,将查询结果返回给停车场。
车辆出场
1、针对开通免密支付的车辆,车辆出场时停车场请求小程序的免密支付,小程序请求车主服务申请扣款将微信受理的结果返回给停车场。
2、小程序订单受理成功,停车场受理失败,由用户线下缴费,停车场调取小程序接口冲正。小程序接到冲正提示,小程序判断用户是否支付成功,状态为支付成功时将用户付款原单退回。
3、小程序订单受理失败,停车场受理失败,由用户线下缴费。
4、小程序与停车场均受理成功,微信返回的异步返回扣款结果失败。
1)已开通微信垫支,会由微信垫支给到第三方,再由微信通知用户缴费。
2)未开通微信垫支,小程序后端会记录异常订单,由第三方联系用户缴费。
开通免密支付流程
1、车主服务 用户状态查询API对接;
2、车主服务 授权开通API对接;
3、车主服务 车牌状态变更通知API对接;(3是2的回调)
4、停车场 2.5免密支付车辆签约接口;(如入场调取4)(查看停车场接口 RecordDensityPay实现)
冲正流程
1、提供冲正接口 (查看停车场接口PostCarCorrect实现)
2、调用车主服务的申请退款。车主服务,申请退款API对接;
3、车主服务 退款结果通知API对接;
线下流程
1、车主服务 申请退款API对接;
2、车主服务 查询退款API对接;
3、车主服务 查询订单API对接;
4、车主服务 退款结果通知API对接;
垫支流程:
1、车主服务 微信垫支还款API对接;
后端微信免密支付订单管理功能:
1、订单查询管理(支付失败,已支付,已退款,冲正退款)
2、异常订单查询管理(异步扣款失败)
需要与停车场对接 微信支付对接 小程序对接
小程序方面 需要开通微信免密支付 验证用户是否绑定车牌号
删除车牌时 需要提示用户已经开通免密支付 需要解绑才能删除车牌
与车主服务小程序对接,在用户点击微信免密支付时唤起车主服务小程序,将用户微信号及车牌号传给车主服务小程序。
微信开发文档:https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=18_3&index=8
字典排序帮助类
//字典排序 public static string DictionaryRankDictionary<string, string> dic) { StringBuilder sb = new StringBuilder); if dic.Count > 0) { dic.OrderByr => r.Key).ToDictionaryr => r.Key, r => r.Value); List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string, string>>dic); lst.Sortdelegate KeyValuePair<string, string> s1, KeyValuePair<string, string> s2) { return s1.Key.CompareTos2.Key); }); dic.Clear); for int i = 0; i < lst.Count; i++) { sb.Appendi == 0 ? "" : "&") + lst[i].Key + "=" + lst[i].Value); } } return sb.ToString); }
调用微信支付接口并回调具体参数查看接口文档)