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

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

标签:
Java WebApp

新版重构的SDK已经重构好,只剩下支付宝了,详情请看wiki

新版重构的SDK已经重构好,只剩下支付宝了,详情请看wiki

新版重构的SDK已经重构好,只剩下支付宝了,详情请看wiki

新版重构的SDK已经重构好,只剩下支付宝了,详情请看wiki

新版重构的SDK已经重构好,只剩下支付宝了,详情请看wiki



讲完支付就来讲下退款吧。
前面的文章的传送门:
微信支付和支付宝支付的三行代码开发教程(一)——开发就像填表格
微信支付和支付宝支付的三行代码开发教程(二)——开发就像填表格
微信支付和支付宝支付的三行代码开发教程(三)——支付的demo

工具包源码下载:https://github.com/zeemood/synergic-developing

如果涉及到两个平台来支付,建议增加字段去区分是微信还是支付宝的订单,以选择正确的平台退款

1. 微信退款

微信退款需要配合pkcs12证书一起使用。具体的下载流程如下所示

(1)打开微信商户平台:pay.weixin.qq.com

(2)进入账户中心>>账户设置>>API安全,具体如下图所示:
图片描述

(3)下载证书并放到服务器以外的目录(比较安全,防止被下载),配置绝对路径到payConfigure.Properties文件中

(4)DEMO如下:

        //创建退款返回信息实体,保证返回的数据结构
        WechatRefundRet refund = new WechatRefundRet();
        //创建退款订单请求信息实体
        WechatRefundInfo refundInfo = new WechatRefundInfo("订单号","退款订单号,方便拆单退款",订单总价,本次退款金额);
        //请求微信
        refund = WechatPayAssistant.refund(refundInfo);

2. 支付宝退款
支付宝退款方便很多,直接上demo

        //创建退款返回信息实体,保证返回的数据结构
        AlipayTradeRefundResponse refund = new AlipayTradeRefundResponse();
        //创建退款订单请求信息实体
        AlipayTradeRefundModel model = AlipayModelUtils.getRefundModel("订单号",new BigDecimal("退款金额"),"退款原因");
        //请求微信
        refund = AlipayAssistant.refund(model);

3. 订单号生成器(推荐使用)

工具包中写了一个订单号生成器SnGenerator,专门用来生成验证码和订单序列号,这里主要介绍generateFormat方法。generateFormat生成的字符串格式是前缀+格式化时间字符串(17位)+随机字符串+后缀

工具类有四个参数

prefix:前缀

suffix:后缀

count:字符串长度,最小为18。传入值小于18,则生成18位的字符串。如果实际生成的字符串(前缀+日期字符串+随机字符串+后缀)的总长度大于count,将会在保留前缀和后缀的前提下,压缩中间部分。

MODE:补充字符串的格式,纯数字,字母数字混合,小写字母,大写字母四种,已经写成了静态变量放到了生成器里

举例说明

(1)不压缩中间字符串的情况

System.out.println(SnGenerator.generateFormat(null,null,17,SnGenerator.MODE_NUM));

输出为:201803051725294997
上述字符串为18位

(2)压缩中间部分的情况

System.out.println(SnGenerator.generateFormat("PREFIX","SUFFIX",17,SnGenerator.MODE_MIX));

输出为:PREFIX201803SUFFIX
也是18位的字符串,因为PREFIX和SUFFIX的缘故,为了保证输出字符串的长度和自定义的一样,压缩前缀和后缀中间的字符串。

之所以这样做是为了方便开发,如果不这么做,你传入的字符串长度为32时,会因为前缀和后缀的缘故增长了字符串长度,那我们还得自己数一下前缀和后缀的长度,这种行为就太蠢了。如果不数,如微信有限制订单号的长度为32,你输入32,则很可能会因为加了前后缀的原因,导致请求失败。

所以规定,count多长,生成多长的字符串。如果实际生成的字符串(包括前后缀),长度超过count值,将保留前缀和后缀的情况下,压缩中间部分,以保证达到count的长度。

建议使用时,如果有前缀后缀(实际上只要其中一个就可以,主要用于订单号在结算时,可以一眼区分不同的订单),前/后缀不要超过5个字母或数字。

如果没有使用前/后缀区分不同订单的需求,此时建议使用generatFormat(count,MODE)的重载方法,直接日期+随机字符串。

觉得好用别忘了给我的github点个小星星
图片描述

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

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

评论

作者其他优质文章

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

关注作者,订阅最新文章

阅读免费教程

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消