首页 > 微信支付——后台对接

微信钱包在线生成器,微信支付——后台对接

互联网 2021-02-28 09:28:52
最近在做支付平台的项目,承接公司业务系统与第三方支付平台的对接任务,主要涉及微信支付、支付宝支付以及理房通支付等第三方平台。微信支付作为后起之秀,市场占有率大有赶超支付宝之势,其复杂多样的社交属性使支付场景丰富而深入。以下主要以业务后台对接的视角,对微信开发文档做了些总结,过滤出我们需要关注的点。(前端及App端对接请查官方资料)一、名词解释商户号:微信支付分配的商户号。支付审核通过后,申请人邮箱会收到腾讯下发的开户邮件, 邮件中包含商户平台的账号、密码等重要信息。

appid:商户通过微信管理后台,申请服务号、订阅号、小程序或APP应用成功之后,微信会为每个应用分配一个唯一标识id。

openid:用户在公众号内的身份标识,一旦确认,不会再变;同一用户在不同公众号拥有不同的openid。商户后台系统通过登录授权、支付通知、查询订单等API可获取到用户的openid。主要用途是判断同一个用户,对用户发送客服消息、模版消息等。

微信管理后台:微信有很多管理平台,容易混淆,我们主要关注下面三个平台: 1. 微信公众平台 微信公众账号申请入口和管理后台。商户可以在公众平台提交基本资料、业务资料、财务资料申请开通微信支付功能。帐号分类:服务号、订阅号、小程序、企业微信(也叫企业号,类似于企业OA)。 2. 微信商户平台 微信支付相关的商户功能集合,包括参数配置、支付数据查询与统计、在线退款、代金券或立减优惠运营等功能。 3. 微信开放平台 商户APP接入微信支付开放接口的申请入口,通过此平台可申请微信APP支付。

签名:商户后台和微信支付后台根据相同的密钥和算法生成一个结果,用于校验双方身份合法性。签名的算法 由微信支付制定并公开,常用的签名方式有:MD5、SHA1、SHA256、HMAC等。

密钥:作为签名算法中的盐,需要在微信平台及商户业务系统各存一份,要妥善保管。key设置路径:微信商户平台(http://pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置。

二、支付流程与场景一个完整的支付流程如下:用户在业务系统下完单,进入收银台页面;选择微信支付,业务后台将业务单信息传给微信后台,完成预下单;拿到预下单结果后,收银台唤起微信交互页面,用户输密码确认支付;微信后台完成支付逻辑,并通知业务后台,完成业务端逻辑。目前微信支持多种支付场景,重点关注扫码支付与公众号支付。

1. 刷卡支付 申请流程

用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。大家比较感兴趣的是,收银员扫了一下我们的微信条形码,卡上的钱是怎么被扣掉的呢?

免密支付流程

2. 扫码支付 申请流程

商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。按二维码的含义分为两个模式。(二维码知识)模式一,商户提前生成固定的商品二维码,用户扫码后发起下单并支付的过程。友宝售货机扫码下单就是使用这种模式。开发前,商户必须在公众平台设置支付回调URL。此URL主要实现的功能为:1-业务端下单;2-调用微信统一下单。

模式二,该模式下,业务订单生成后,调用微信统一下单接口,获得微信返回的支付单二维码(注意该二维码是由微信生成的,且是支付单信息的二维码,会过期失效,与模式一中不变的商品二维码是有区别的),并展示到页面,用户微信扫码后会唤起密码验证流程。该模式主要应用于PC端先下单,再支付的场景。

3. APP支付 申请流程

又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。

4. 公众号支付 申请流程

公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

业务流程

注意项

必须设置支付目录,确保实际支付时的请求目录与后台配置的目录一致,否则将无法成功唤起微信支付;必须设置授权域名,统一下单接口要求公众号支付时必传用户的openid,而微信规定只有被设置过的授权域名才能获取到openid,其它的域名都将获取失败。

5. H5支付

H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。申请流程:使用注册微信支付时登记的邮箱,将公司名称+商户号+联系方式 以及对应H5支付应用场景说明发送到 wxpaySP@tencent.com

6. 小程序支付

用户在微信小程序中使用微信支付的场景,接口对接时与公众号支付很相似。三、接口对接

1. 对接方式

微信支付开发文档上将接口分为普通商户版和服务商版。所谓普通商户,是指有实际业务需求,要对接微信支付的广大商户;而服务商,是指那些有开发能力的第三方服务提供商,它们封装微信支付高级接口,为普通商户提供支付申请、技术开发、机具调试、活动营销等全生态链服务支持,以简化对接流程。因此,普通商户对接微信支付平台有两个选择:直接对接微信平台 或 对接服务商平台

2. 接口文档

服务商对外提供的api,入参及出参和微信普通商户版api大体相同,只是返回参数里多了一些包装数据。所以我们关注普通商户版api即可,以下的规则及api均来自于微信官方普通商户版接口文档。

2.1 接口规范

2.2 API列表

下面列出了几个比较关键的API及其参数要求,入参及返参只列出了必传或需要注意的字段,完整参数请以官方文档为准。为安全起见,无论是商户后台请求微信平台,还是微信平台请求商户后台,也无论是API的入参,还是返参,都要遵守发起端加签名,接收端校验签名的规则。比如商户端请求微信平台时,会对入参信息加签名,微信平台接到请求,会先校验签名,校验通过并处理完,微信平台再将返回参数按同一算法加签名,商户端接收响应时也需要先校验签名,校验通过再做业务处理。 因此所有API中,无论是入参还是返回参数都包含如下通用字段。

2.2.1 统一下单 /pay/unifiedorder

除了刷卡支付(刷卡支付有单独的支付接口,不调用统一下单接口),其它的支付方式都需要调用统一下单接口。商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。

入参信息

入参例子

wx2421b1c4370ec43b JSAPI支付测试 10000100 1add1a30ac87aa2db72f57a2375d8fec http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 1415659990 14.23.150.211 1 JSAPI 0CB01533B8C1EF103065174F50BCA001

获取openid

公众号支付模式下,统一下单接口必须要传用户的openid,业务后台获取openid的步骤如下:第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;通过code参数加上AppID和AppSecret等,通过API换取access_token;通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

为避免重造轮子,我们使用了公司基础平台组提供的微信接入平台——第三方OAuth转接接口, 采用静默授权方式获取用户openid。需要提前在基础平台配置应用的AppID及AppSecret,并需要他们分配全局唯一的app_name。 关于OAuth 2.0 授权协议,大家可自行了解。

返回参数

返回结果有两个状态码return_code及result_code,需要理解其各自的含义。return_code表示通信是否成功,当其为SUCCESS时,才会有后续的返回字段,当其为FAIL时,return_msg会填充错误信息;而result_code表示业务操作是否成功,当其为SUCCESS时,才会返回后续的业务字段(如prepay_id等),当其为FAIL时,会填充err_code及err_code_des等字段。

返参试例

2.2.2 支付结果通知

支付成功后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功(因此商户端需要定时去check两边待支付单子的状态)。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)。回调通知接口对安全性要求极高,有如下注意点: 1. 接口幂等,同样的通知可能会多次发送给商户系统。商户系统必须保证回调接口是幂等的,能够正确处理重复的通知。 2. 并发控制,在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。3. 签名验证,商户系统对于支付结果通知的内容一定要做签名验证。4. 金额校验,校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。

接口链接

该链接由商户端提供,通过【统一下单API】中提交的参数notify_url设置,通知url必须为直接可访问的url,不能携带参数。示例:notify_url:“https://pay.weixin.qq.com/wxpay/pay.action”

入参信息

入参信息是由微信平台整理发送的,商户后端需要接收并解析各字段,做必要的校验。

入参例子

1

返回参数

商户后台的返回参数必须是微信支付指定的格式,否则都被微信认为通知失败,会不断重试。

返参例子

2.2.3 申请退款 /secapi/pay/refund

退款有两种方式,商户可以登录微信商户平台,直接使用管理后台的退款功能;另一种则是接口对接,在商户的业务系统里发起退款。 退款时需要注意的是:1. 交易时间超过一年的订单无法提交退款;2. 微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。3. 每个支付订单的部分退款次数不能超过50次。

入参信息

入参例子

wx2421b1c4370ec43b 10000100 6cefdb308e1e2e8aabd48cf79e546a02 1415701182 1415757673 1 1 FE56DD4AA85C0EECA82C35595A69E153

返回参数

这里需要注意返回参数里return_code为SUCCESS且result_code也为SUCCESS时,只是说明退款申请成功了,并不代表钱已经成功退给用户。因此,业务端需要通过退款查询接口定时check退款单的状态,如果有异常需要报警出来,以便人工处理。

退款状态

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读