15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 微信支付——后台对接

微信支付——后台对接

时间:2023-05-21 10:34:01 | 来源:网站运营

时间:2023-05-21 10:34:01 来源:网站运营

微信支付——后台对接:
最近在做支付平台的项目,承接公司业务系统与第三方支付平台的对接任务,主要涉及微信支付、支付宝支付以及理房通支付等第三方平台。微信支付作为后起之秀,市场占有率大有赶超支付宝之势,其复杂多样的社交属性使支付场景丰富而深入。以下主要以业务后台对接的视角,对微信开发文档做了些总结,过滤出我们需要关注的点。(前端及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网站支付、实体店单品或订单支付、媒体广告支付等场景。按二维码的含义分为两个模式。(二维码知识)




3. APP支付 申请流程

又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。
4. 公众号支付 申请流程

公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:
业务流程



注意项

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等不同场景生成交易串调起支付。

入参信息

入参例子


<xml> <appid>wx2421b1c4370ec43b</appid> <body>JSAPI支付测试</body> <mch_id>10000100</mch_id> <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str> <notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url> <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid> <out_trade_no>1415659990</out_trade_no> <spbill_create_ip>14.23.150.211</spbill_create_ip> <total_fee>1</total_fee> <trade_type>JSAPI</trade_type> <sign>0CB01533B8C1EF103065174F50BCA001</sign></xml>获取openid

公众号支付模式下,统一下单接口必须要传用户的openid,业务后台获取openid的步骤如下:
  1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
  2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
  3. 通过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等字段。
返参试例


<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wx2421b1c4370ec43b]]></appid> <mch_id><![CDATA[10000100]]></mch_id> <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str> <openid><![CDATA[oUpF8uMuAJO_M2pxb1Q9zNjWeS6o]]></openid> <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id> <trade_type><![CDATA[JSAPI]]></trade_type></xml>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
入参信息

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

<xml> <appid><![CDATA[wx2421b1c4370ec43b]]></appid> <bank_type><![CDATA[CFT]]></bank_type> <mch_id><![CDATA[10000100]]></mch_id> <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str> <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid> <out_trade_no><![CDATA[1409811653]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign> <time_end><![CDATA[20140903131540]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id></xml>返回参数

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


<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg></xml>2.2.3 申请退款 /secapi/pay/refund

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

入参例子


<xml> <appid>wx2421b1c4370ec43b</appid> <mch_id>10000100</mch_id> <nonce_str>6cefdb308e1e2e8aabd48cf79e546a02</nonce_str> <out_refund_no>1415701182</out_refund_no> <out_trade_no>1415757673</out_trade_no> <refund_fee>1</refund_fee> <total_fee>1</total_fee> <transaction_id></transaction_id> <sign>FE56DD4AA85C0EECA82C35595A69E153</sign></xml>返回参数

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

关键词:后台,支付

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭