长时间未总结,今为.Net 前后台开发及小程序支付相关经验做记录

2024-07-04
来源:网络整理

加班一个多月了,偶尔会请一天假,补补觉,陪陪家人,好久没有做过总结和记录了,今天不加班了,就先来总结一下这段时间做的一些事情,得到的经验。

这期间由于公司需要,接触了一些.Net前后端开发,逐渐学习了一些WCF、H5站点、Soap、Linq等,也学习了一些BLL、DAL相关的内容。同时还参与了微信支付、微信医保支付相关功能的改版,将微信支付、微信医保支付功能加入到微信小程序中。

下面主要记录小程序支付相关的规划,实现以及坑点。

###1. 产品状态

首先,在接入微信支付功能之前,我们的产品情况是这样的:

1. 公众号、APP及相关配套功能的H5网站

2 小程序已经具备一些基本功能,不使用web-view

3 小程序之前的服务器和现有的公众号h5站点是不同的站点

###2. 替代解决方案

基于以上几点,当时提出了两种解决方案:

解决方案1.利用小程序代码开发支付相关功能,并在站点添加相应接口

方案二、使用web-view嵌入公众号h5站点支付功能,包括订单列表、订单详情、支付确认、支付订单、支付结果展示、支付历史等,实际支付时只使用小程序代码进行开发

最后我们采用了第二种方案,我们以为有了现成的h5页面,只需要解决h5站点间登录的同步,以及小程序支付接口的唤醒问题,但是发现还是有很多坑。

###3. 解决方案实施

基本流程如上图,订单相关页面及微信支付下单流程都在h5中,下单成功后通过wx.跳转回小程序,小程序执行wx.调出支付页面,将获取的结果展示在h5中。同时下单时会设置支付结果回调页面(),实际支付成功后微信会主动调用该页面,并在此页面操作订单支付表的支付状态。

小程序代码如下:

// 直接在onLoad中唤起支付页面(中间的部分参数需要用decodeURIComponent解码) onLoad: function(options) { var payType = options.type; var timeStamp = options.timeStamp; var nonceStr = decodeURIComponent(options.nonceStr); var package = decodeURIComponent(options.package); var signType = options.signType; var paySign = decodeURIComponent(options.paySign); if(type == 1) { // 微信支付 this.wxPay(timeStamp, nonceStr, package, signType, paySign); }else { var payAppId = options.appid; var payUrl = decodeURIComponent(options.payUrl); // 医保支付,需要跳转到医保小程序进行支付,需要获取医保小程序appid和payurl } } // 唤起微信支付窗口 wxPay: function(timeStamp, nonceStr, package, signType, paySign) { wx.requestPayment({ 'timeStamp': timeStamp, 'nonceStr': nonceStr, 'package': package, 'signType': signType,//'MD5', 'paySign': paySign, 'success':function(res){ // 成功跳转到h5结果页面 }, 'fail':function(res){ // 失败提示并返回订单页 }, 'complete': function(res){ // 较早版本,用户取消支付,不进入fail回调,仅回调complete // res.errMsg为requestPayment:fail cancel if(res.errMsg=='requestPayment:fail cancel') { // 用户取消返回订单页 } } }) }

#####注意:

订单生成下单成功后进入支付状态,建议区分订单和支付表单,实际支付页面只能在小程序中调出,不能用h5调出微信支付页面,支付结果必须以微信回调为准,不能直接用wx..返回的结果。因为公众号和小程序用的是同一套h5代码等必须设置配置项,不同入口用的是不一样的;还有在支付表单中一定要明确是小程序支付还是公众号支付,不然会出现无法退款等情况。(退款必须支付)

微信小程序h5支付_微信支付小程序_微信支付程序小程序在哪

四、填补空缺

陷阱一:支付商户与小程序主体不一致,而我们的商户是特殊商户,导致小程序无法进行MA授权,无法开通微信支付功能。

######解决方案:

这里有很多解决办法,最快捷的就是找腾讯内部人员提交申请,提交资料后他们会帮忙做MA授权(我们下午提交的,第二天就ok了)

2号坑

不同的信息需要h5站点兼容

######解决方案:

添加支付相关配置,不同入口读取不同的配置项,包括、、、回调地址等配置。

3号坑

由于你之前登录过,h5站点出现无法登录的问题

######解决方案:

我们和h5用的数据库是一样的,所以在h5站点再绑定一次就行了,当然这里需要考虑的是小程序和公众号都存在,所以要单独建立绑定关系。

这是我们之前产品设计的一个问题,其实我们可以通过建立绑定关系(因为这是微信用户唯一不变的标识),也可以考虑缓存不同的来源。

4号坑

历史和退款问题

######解决方案:

支付记录中需要存储下单是哪一端的,因为如果是通过小程序支付,退款时必须用小程序信息,公众号也是一样。所以支付记录表中应该有一个字段,最好用支付订单号前两位,在生成时记录支付方式,比如01是公众号支付,02是小程序支付。

我们的订单号生成规则是2位支付方式+1位交易订单类型(付款、退款等)+2位产品类型+时间戳+其他

原文:简书博客:IT老吾

ps时间有点紧,还有一些具体的解决办法和坑点还没总结出来,后续再补充,如果有错误或者不足的地方还请大家指出...

另外,使用web-view的体验有点坑。坑1.H5加载比单独使用小程序慢很多。坑2.无法精准捕捉H5页面加载的进度……

分享