为了账号安全,请及时绑定邮箱和手机立即绑定

微信支付和支付宝支付的三行代码开发教程(三)——支付的demo

标签:
Java WebApp

新版重构的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点个小星星
图片描述

点击查看更多内容
8人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
106
获赞与收藏
301

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消