代码改变世界

微信支付之无感支付

2019-12-05 16:48  .net小跟班(杜)  阅读(1927)  评论(0编辑  收藏  举报

停车免密支付功能的开发  首先我们需要做的是申请微信商户号并开通微信代扣

场景图

前端功能开发:
车辆进场
车辆入场,停车场将用户车牌信息传给小程序。小程序根据车牌信息查询用户是否开通微信免密支付,将查询结果返回给停车场。
车辆出场
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 DictionaryRank(Dictionary<string, string> dic)
        {
            StringBuilder sb = new StringBuilder();
            if (dic.Count > 0)
            {
                dic.OrderBy(r => r.Key).ToDictionary(r => r.Key, r => r.Value);
                List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string, string>>(dic);
                lst.Sort(delegate (KeyValuePair<string, string> s1, KeyValuePair<string, string> s2)
                {
                    return s1.Key.CompareTo(s2.Key);
                });
                dic.Clear();

                for (int i = 0; i < lst.Count; i++)
                {
                    sb.Append((i == 0 ? "" : "&") + lst[i].Key + "=" + lst[i].Value);
                }
            }
            return sb.ToString();
        }

调用微信支付接口并回调(具体参数查看接口文档)