wedowx
v0.0.4
Published
本人初学nodejs,代码可能有诸多不完善的地方,请大家多多指教。
Downloads
3
Readme
##基于nodejs微信支付接口 本人初学nodejs,代码可能有诸多不完善的地方,请大家多多指教。
QQ:85920312 Email:[email protected]
####微信支付提供三种方式:
公众号支付 此场景主要针对有公众号的用户,商户拥有H5的商城网站,用户在页面中下单并调用微信端付款完成购买
扫码支付 商户根据微信支付规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买,如PC网站集成的付款方式中可以使用微信扫码支付
刷卡支付 这个没有太深入研究,在全家等商店使用的微信付款即为此方式
####本接口除实现公众号支付和扫码支付外还提供下面的功能:
- 企业付款 提供企业向用户付款的功能,支付企业通过API接口付款,或通过微信支付商户平台网页功能操作付款
- 现金红包 暂未实现
- 代金券或立减优惠 暂未实现
支付接口基本使用说明
微信支付开发过程中遇到的问题做下总结:
- 就是官方的文档不够详尽,如以XML方式提交参数而非JSON,返回值同样是XML而非JSON,开始走了不少弯路。
- 签名的生成,其实这块也还好,但一定要注意参数是严格区分大小的,且值为空的参数不参加计算。
- 各种token和ticket的获取容易让人混淆,加再上前后端参数不一致,抓狂是正常的
- 很多同学所以调用不成功的另外一个原因是在公众平台中没有将公众号支付的开发配置项调好,尤其是支付授权目录,如果没有设置正确就可能出现无法支付成功的情况
- 测试过程中有同学会将openid写死,嘎嘎,我也是其中之一,自己测试支付完全没问题,但发给其他人支付的时候一直会提示绑定银行卡
接口初始化
接口中大部分函数都是返回promise,请使用下面的方式编写:
注意点
下面的接口参数中显示需要下面参数的都不需要设置:
- appid
- mch_id
- nonce_str
- sign
统一下单
除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。更多的参数请参考微信开发文档。
查询订单
该接口提供所有微信支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。 需要调用查询接口的情况:
- 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
- 调用支付接口后,返回系统错误或未知交易状态情况;
- 调用被扫支付API,返回USERPAYING的状态;
- 调用关单或撤销接口API之前,需确认支付状态;
具体参数和返回值请参看微信开发文档
此处只能查询单个记录,并批量查询功能,主要是根据微信订单号或商户订单号来查询,参数一为微信订单号,参数二为商户订单号,二者有一即可。
关闭订单
以下情况需要调用关单接口:商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
具体参数和返回值请参看微信开发文档
参数为商户订单号。
申请退款
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 注意:
- 交易时间超过一年的订单无法提交退款;
- 微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。 注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
具体参数和返回值请参看微信开发文档
查询退款
提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。具体参数和返回值请参看微信开发文档 。
企业付款
企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款的功能。 比如目前的保险行业向客户退保、给付、理赔。 企业付款将使用商户的可用余额,需确保可用余额充足。查看可用余额、充值、提现请登录商户平台“资金管理”进行操作。 注意:与商户微信支付收款资金并非同一账户,需要单独充值。且需要双向证书。 具体参数和返回值请参看微信开发文档 。
查询企业付款
用于商户的企业付款操作进行结果查询,返回付款操作详细结果。 具体参数和返回值请参看微信开发文档 。
公众号支付
公众号支付的主要流程如下: 用户进入公众号页面---> 提交订单 --> 业务系统生成订单 --> 调用微信统一下单接口 --> 返回预付订单信息prepay_id--> 生成供前端JS调用的对象并签名 --> 调用微信支付控件 --> 返回商户页面,显示购买成功。具体流程可参考此图:
业务系统生成订单
此处可以没有,也可以放在微信统一下单动作之后,即本地业务系统的订单。我们先按放在统一下单前的方式操作。
微信统一下单接口
在微信支付三种方式中都需要先调用统一下单接口在微信端生成预订单,这里需要注意此时在商户平台的交易订单中不会出现此预订单。提交预订单的代码如下:
注意点:
- openid 为当前用户在此公众号中的openid;
- out_trade_no:如果是先调用的业务系统则应该是业务系统中的订单号;
- trade_type 此处必须为"JSAPI";
- 具体参数请参阅微信支付的 官方文档
生成prepay_id,生成前端JS调用的对象并签名 使用express的WEB示例代码如下,前端代码如下,请将下列代码放在script标签中,另外需要引用JSSDK的"http://res.wx.qq.com/open/js/jweixin-1.0.0.js":
后端代码:
注意点:
- 因为需要调用JSSDK,所以需要在每个需要调用JSSDK的页面获取TICKET信息,具体请参看jssdk的调用设置;另外对于 token和ticket的获取提供了另外一个模块wxapi.js文件,其中有ticket和token的获取的方法。此模块功能还不完善,仅供参考。
调用微信支付控件,输入密码,付款成功