新版重构的SDK已经重构好,只剩下支付宝了,详情请看wiki
下载完源码mvn install之后,配置完成后可以开始开发了。DEMO是v1.1.X的
在你自己项目pom文件中加入
<dependency> <groupId>cn.zeemood</groupId> <artifactId>synergic-devloping</artifactId> <version>1.1.4</version> </dependency>
注意:以下的XXXPayAssistant都可以用PayAssistant中找到对应的方法
v1.1.2已经完善了订单号生成器SnGenerator,建议调用两个参数的那个。详细使用说明看https://www.imooc.com/article/23666
微信预支付(统一下单)
APP支付:
//创建微信预支付返回对象,主要是为了返回给APP时数据结构不变 WechatPreOrderInfo wechatPreOrderInfo = new WechatPreOrderInfo(); //创建预支付请求信息 WechatPayInfo payInfo = new WechatPayInfo("订单标题", "商户订单号", Integer.valueOf("订单价格乘100"), "配置文件中的回调地址后缀", WechatPayConst.TRADE_TYPE_APP, request.getRemoteAddr()); //向微信发起请求 wechatPreOrderInfo = WechatPayAssistant.preOrder(payInfo);
如果你的前端人员不想自己做二次加签,可以使用v1.1.4版本之后的工具包,调用下面这行代码
Map<String,Object> map = WechatPayAssistant.sign4App(wechatPreOrderInfo);
然后返回map就可以了。
微信扫二维码支付
//创建微信预支付返回对象,主要是为了返回给APP时数据结构不变 WechatPreOrderInfo wechatPreOrderInfo = new WechatPreOrderInfo(); //创建预支付请求信息 WechatPayInfo payInfo = new WechatPayInfo("订单标题", "商户订单号", Integer.valueOf("订单价格乘100"), "配置文件中的回调地址后缀", WechatPayConst.TRADE_TYPE_SWEEP_CODE, request.getRemoteAddr()); //向微信发起请求,此时返回的code_url不为空,把这个字段值生成二维码就可以了 wechatPreOrderInfo = WechatPayAssistant.preOrder(payInfo);
公众号支付:
//创建微信预支付返回对象,主要是为了返回给APP时数据结构不变 WechatPreOrderInfo wechatPreOrderInfo = new WechatPreOrderInfo(); //创建预支付请求信息 WechatPayInfo payInfo = new WechatPayInfo("订单标题", "商户订单号", Integer.valueOf("订单价格乘100"), "配置文件中的回调地址后缀", WechatPayConst.TRADE_TYPE_OFFICIAL_ACCOUNT, request.getRemoteAddr()); //向微信发起请求,此时返回的code_url不为空,把这个字段值生成二维码就可以了 wechatPreOrderInfo = WechatPayAssistant.preOrder(payInfo);
公众号的还没测试过,看了文档,跟扫二维码支付的差不多,应该没问题。流程是:
1.用户调用接口,生成商户的订单,并提交到微信端。注意,必须先获取到openid,公众号支付openid必填。
2.微信生成微信端的订单后,调用商户的接口,对返回参数进行二次加签,可以调用下面这行代码。
Map<String,Object> map = WechatPayAssistant.sign4WxH5(wechatPreOrderInfo);
将map返回给页面,使用JS API在微信内调起微信支付。
地址:使用JS API在微信内调起微信支付
微信支付异步回调:
回调都是一样的,主要说说怎么处理接收的信息。
public void callback(HttpServletRequest request,HttpServletResponse response) throws Exception{ //解析数据 WechatPayRet ret = WechatPayAssistant.parseRequest(request); /** * 自己的业务 */ //成功之后要应答,让微信别调了。但是还是会有重入的可能,所以必须做好数据锁 WechatPayAssistant.echo(response); }
退款的后面会说到……
支付宝支付
APP支付:
String orderString = “支付宝APP支付需要返回给APP的字符串”; //创建支付宝APP支付的数据模型 //注:此处用的支付宝官方的SDK,所以使用工具类填写必填参数 AlipayTradeAppPayModel model = AlipayModelUtils.getAppPayModel(BODY, SUBJECT, OUT_TRADE_NO , TIME_EXPRESS, TOTAL_ACCOUNT); //支付统一收单,我还是喜欢叫这个是预支付 //推荐使用支付宝支付助手里的preOrder4XXX方法,起码知道自己需要生成哪些预支付的实体类 orderString = AlipayAssistant.preOrder(NOTIFY_URL,model);
网页支付
String html = "需要返回给前端的html代码,接收后会跳转到支付宝的支付页面"; //创建支付信息类 AlipayTradePagePayModel model = AlipayModelUtils.getPcPayModel(outTradeNo, totalAmount, subject, body, passbackParams); //预支付,将html返回给前端就可以了 html = AlipayAssistant.preOrder(model,RETURN_URL,NOTIFY_URL);
手机网页支付也差不多,生成对应数据模型model就可以了
异步回调函数
(以SpringMVC为例)
@ResponseBody public String callback(HttpServletRequest request,HttpServletResponse response) throws Exception{ //解析回调请求并验签 AlipayAppPayRet ret = AlipayAssistant.parseRequest(request); /** * //网页支付的可以用更为通用的方法 * Map<String,String> map = AlipayAssistant.getParamsMap(request.getParametersMap(),false); */ /** * 自定义业务 */ //应答支付宝 return AlipayAssistant.echo(); }
觉得好用别忘了给我的github点个小星星
热门评论
大佬,我问一下,如果要用这两种模式的话,我咋改?我看上面只有JSAPI模式
商户订单号 是从哪里生成的啊大佬,刚学求指点