商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】
步骤5:商户后台接收支付通知。api参见【支付结果通知API】
步骤6:商户后台查询支付结果。,api参见【查询订单API】
对于服务端来说,只需要做两件事情,一是接收APP提交的支付申请,调用微信下单接口生成预支付订单,并将签名信息返回给APP;二是开发接收微信支付结果通知的接口,微信官方后台在你们的APP支付完成后,会调用该接口通知你们该支付订单的支付结果。
一、添加微信支付依赖
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
二、下单接口的开发
微信官方统一下单接口URL:https://api.mch.weixin.qq.com/pay/unifiedorder
必传参数说明:
1、appid:应用ID string(32) 如:wxd678efh567hg6787
微信开放平台审核通过的应用APPID(请登录open.weixin.qq.com查看,注意与公众号的APPID不同)
2、mch_id:商户号 string(32) 如:1230000109
微信支付分配的商户号
3、nonce_str:随机字符串 string(32) 如:5K8264ILTKCH16CQ2502SI8ZNMTM67VS
随机字符串,不长于32位,可直接调用WXPayUtil.generateNonceStr()获取。推荐随机数生成算法
4、sign:签名 string(32) 如:C380BEC2BFD727A4B6845133519F3AD6
签名,详见签名生成算法
5、body:商品描述 string(32) 如:腾讯充值中心-QQ会员充值(APP名称-商品名称)
商品描述交易字段格式根据不同的应用场景按照以下格式:APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。
6、out_trade_no:商户订单号 String(32) 如:20150806125346
商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
7、total_fee:总金额 Int 如:888
订单总金额,单位为分,详见支付金额
8、spbill_create_ip:终端IP String(64) 如:123.12.12.123
支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP
9、notify_url:通知地址 String(256) 如:http://www.weixin.qq.com/wxpay/pay.php
接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。即第二步开发的接口外网地址
10、trade_type:交易类型 String(16) 如:APP
支付类型