微信商户申请开通:https://pay.weixin.qq.com/service_provider/index.shtml
注意:开通公众账号之后,然后根据流程开通相对应的商户平台
开发文档之模式1的流程图:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4
github下载地址:https://github.com/townkoim/WXPay
开发文档之模式2的流程图:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5
开发之前所需要的参数:
1、APP ID ,应用ID(在公众平台--基本配置模块中)
2、APP Sercret ,应用秘钥(在公众平台--基本配置模块中)
3、API Key,API的秘钥(在商户平台--API安全中设置)
4、mchID , 商户号(在公众平台---微信支付---商户信息)
5、order_api , 统一下单API的接口
6、notify_url 交易成功回调的接口的URL
开发模式1的配置:
模式1开发流程:
1、生成二维码(https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4),给买家扫码
2、回调到上图设置的回调的URL当中,得到必要的参数,调用统一下单API,生成参数,提交到微信接口,并把这些参数保存到数据库(最重要的是
商户订单号,此订单号再微信支付成功异步回调中,会返回这个订单号,也就是说,订单号是此条数据的唯一标识)
3、步骤2中统一下单会返回一个
code_url(二维码连接),生成二维码,给买家扫码
4、买家打开微信扫码,支付完成。
5、微信进入回调的url (该回调的URL在下单的API的参数中)
6、在回调的接口中获取微信传过来的参数。根据商户订单号--修改数据库的数据。 推送到APP成功的状态
模式2开发流程:
1、调用统一下单API,生成参数,提交到微信接口,并把这些参数保存到数据库(最重要的是
商户订单号,此订单号再微信支付成功异步回调中,会返回这个订单号,也就是说,订单号是此条数据的唯一标识)
2、步骤2中统一下单会返回一个
code_url(二维码连接),生成二维码,给买家扫码
3、买家打开微信扫码,支付完成。
4、微信进入回调的url (该回调的URL在下单的API的参数中)
5、在回调的接口中获取微信传过来的参数。根据商户订单号--修改数据库的数据。 推送到APP成功的状态
结论:模式1与模式2相比,模式1更为繁琐和复杂,市场上用的基本都是模式2
模式2的代码:
1、组成下单API的数据,发送给微信,获取返回值
//微信扫码模式2
public void wxPayModel2() {
String body = "测试商户的名称";
int money = 100;//交易金额,以分为单位100=1元。
String productId= WeiXinUtil.getTimeStamp();//获取商品订单号
String outTradeNo=WeiXinUtil.getOrderNo();//获取该笔交易的订单号
String ip=WeiXinUtil.getIp();//获取发起请求的IP,我这里就直接获取了本机的IP了,实际开发需要获取实际的请求IP
ScanPayReqData data = new ScanPayReqData(body,money,productId,outTradeNo,ip);//组成要发送给微信的数据为一个实体类
String reuslt= HttpUtil.sendPost(Configure.orderApi,data);//将组装好的数据发送到微信,并获取微信的返回值
//接下来的操作就是解析result。 将xml格式的result解析成json或者实体类。然后将数据保存到数据库...一下步骤省略...在改xml中有一个参数code_url,这个就是二维码的链接,
//将该二维码的链接生成图形二维码,给用户扫码。会进入到Configure.notifyUrl的回调接口当中。现在假设回调的为下面的方法notifyUrl();
}
接下来的操作就是解析result。 将xml格式的result解析成json或者实体类。然后将数据保存到数据库...一下步骤省略...在改xml中有一个参数code_url,这个就是二维码的链接,
将该二维码的链接生成图形二维码,给用户扫码。会进入到Configure.notifyUrl的回调接口当中。现在假设回调的为下面的方法notifyUrl();
将该二维码的链接生成图形二维码,给用户扫码。会进入到Configure.notifyUrl的回调接口当中。现在假设回调的为下面的方法notifyUrl();
2、notifyUrl()方法中需要操作的动作----注意:只有在微信支付成功,微信才会回调该方法
参考:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_2
//微信支付成功之后的回调,注意,只有在成功支付,微信才会进入回调,注意
public void notiyUrl(HttpServletRequest req,HttpServletResponse response){
ServletInputStream input = req.getInputStream();//这里得到输入流,这就是微信在回调该接口的时候,会把参数传到这里,下一步就是将流解析成xml。然后再将xml解析成我们需要的格式
//得到数据之后,通过outTradeNo来修改wxPayModel2()中已经插入数据库中的数据
//然后发送推送给APP。说交易成功。
}
github下载地址:https://github.com/townkoim/WXPay
说明:改代码仅供参考,不能运行。代码在
WXPay
/
app
/
src
/
main
/
java
/
com
/
example
/
lb
/
weixin
/
pay
/
wxpay
/目录下