# WePaySystem **Repository Path**: qxinying/WePaySystem ## Basic Information - **Project Name**: WePaySystem - **Description**: 独立支付系统,现包含微信支付(因微信公众号授权地址的唯一性,故还包含了微信授权功能) - **Primary Language**: C# - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 1 - **Created**: 2019-10-17 - **Last Updated**: 2024-08-31 ## Categories & Tags **Categories**: payment-dev **Tags**: None ## README # WePaySystem #### 介绍 微信授权支付系统,可对第三方系统提供api。用于解决同一商户的多站群授权支付时授权回调地址只有一个的痛点。第三方可通过此系统调用微信授权,并接收授权之后获取的相关信息,并通过此系统调用微信支付,获取支付回调,并将回调信息及时通知第三方进行处理。 #### 软件架构 软件架构说明 1.第三方发送订单请求到支付系统(/aspx/pay/wxpay.aspx) 2.支付系统进行安全性验证(包括第三方开发者身份参数的合规性),并返回实际支付地址 3.进入实际支付地址并传入订单参数,再次校验,正常的订单进行数据保存到表WePayOrder 4.调用微信支付,微信支付订单号在页面加载时生成唯一并提交腾讯服务器 5.异步和同步的回调地址根据版本进行设置 5.1 v1.0:设置为对应第三方系统的异步和同步的回调地址 5.2 v2.0:设置为本系统的回调地址,在回调处理后,给第三方发送通知 6.微信支付回调 6.1 重复支付验证,金额验证 6.2 根据提交给腾讯服务器的本支付系统订单号更新支付状态,支付时间等相关信息 6.3 同步回调==》带上参数返回给第三方同步回调地址并接收响应(HttpGet) 6.4 异步回调==》如果没有响应过的带上参数返回给第三方跳转到第三方异步回调地址并接收响应(HttpGet),已响应的忽略 6.5 Global异步通知次数:总共会发起13次通知(Global通知、HttpGet),在同步异步都转发通知之后,通知频率可以稍微降低一些。本系统已成功回调但未收到第三方响应的请求版本为2.0的订单发送通知,通知时间为(距离回调时间1m/2m/3m/4m/5m/10m/20m/30m/1h/2h/5h/12h/24h),一共13次,第三方返回“SUCCESS”之后不再异步通知 #### 几个思考点 1.为什么首次握手之后进行支付时还要重复验证相关参数? 答:确保二次传输的数据是正确无误的,因为首次握手之后,第三方服务端是可以增加逻辑处理的。 2.v1.0有什么意义? 答:稳定性:如果本系统宕机导致大量给第三方的支付成功的通知未发送,将导致第三方系统大量掉单。 安全性:腾讯服务器和第三方服务器的直接通信肯定要比中间增加一个中转服务器的安全性要高。 系统开发的复杂度和系统运行效率:回调直接交由第三方处理,使本系统更为轻便简洁,更高效。 当然,如果考虑到与第三方系统进行分账操作,那么需要由本系统获取回调,然后再通知第三方,否则无法确定哪些订单是实际支付的。 #### 第三方开发者的格式约定 1.appid:16位 2.appsecret:32位 3.第三方订单号:10位,不同类型的订单可用首位字符进行区分 4.同步地址和异步地址必须为完整地址,可访问,且不允许携带参数 #### 操作说明: 1.部署网站,对log文件夹赋予读写权限 2.公众号管理后台(认证的服务号)配置:js安全域名、回调域名、业务域名、服务器ip白名单 3.商户平台设置:js支付目录 4.xmlconfig/wxpay.config 5.xmlconfig/site.config 微信相关参数 (原始ID:wxid/令牌:wxtoken/开发者ID:wxappid/开发者密码:wxappsecret) 6.进入管理后台 http://www.xxx.com/admin/login.aspx(使用默认账号admin,密码admin888登录) 7.站点管理-第三方开发者管理里,创建第三方开发者账号,可以随机生成appid和appsecret,也可手动填写 8.第三方调用方法: 8.1 子母账号授权:参考 /demo/WxOauth.aspx 进行微信授权调用 8.2 支付调用:参考 /demo/WePay.aspx 进行支付调用 8.3 支付回调:/demo/wxpay文件夹 9.调试方法:可使用日志记录进行调试(Xinying.Common.Utils.WriteTxt方法可写日志)