支付宝退款功能开发

当接到这个任务的时候,我说实话没搞过,之前搞过支付的,感觉退款应该很容易吧,但实际上并没有我想象的那么容易。(不是开发难,是别的问题)
首先,按照国际惯例,我先在支付宝的官网上查看开发文档
蚂蚁金服开放平台 - 文档中心
这就是咱们要开发的 必备文档

我是要用java开发

支付宝退款功能开发_第1张图片

当看到这个的时候,应该就差不多了,按照这个写,不过按照这个写的时候,需要用到支付宝的sdk,导入几个jar包,不然程序会报编译错误。
需要的关键jar包:

支付宝退款功能开发_第2张图片

开始编写代码:
/**
 * 支付宝退款工具类
 * @author WangXJ
 */
public class Aliaction {
	/**
	 * @param out_trade_no 订单支付时传入的商户订单号,不能和 trade_no同时为空。
	 * @param trade_no 支付宝交易号,和商户订单号不能同时为空
	 * @param refund_amount 需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
	 * @return 将提示信息返回
	 */
	public  synchronized static  String alipayRefundRequest(String out_trade_no,String trade_no,double refund_amount){
        // 发送请求
		String strResponse = null;
		try {
			AlipayClient alipayClient = new DefaultAlipayClient(AliRefundConfig.request_url,AliRefundConfig.app_id,AliRefundConfig.private_key,"json","GBK",AliRefundConfig.ali_public_key,"RSA");
			AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
			AlipayRefundInfo alidata= new AlipayRefundInfo();//这里我封装了一个类用来传递json数据
			alidata.setOut_trade_no(out_trade_no);
			alidata.setRefund_amount(refund_amount);
			alidata.setTrade_no(trade_no);
			request.setBizContent(JsonUtil.toJSONString(alidata));//将数据格式化成json格式
			AlipayTradeRefundResponse response;
			response = alipayClient.execute(request);
			if ("10000".equals(response.getCode())) {
				System.out.println("退款成功");//没有提示消息就是好消息strResponse=null
            }else {
            	strResponse=response.getSubMsg();//退款失败的提示信息
            }
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return strResponse;
	}

本以为写到这里应该就没问题了,开始测试,测试的时候只需要请求一个action,然后action中调用此工具类里的这个方法就行了。(切记:一定要先下单。测试下一个0.01元的订单,然后得到该订单的out_trade_no和(trade_no,refund_amount:0.01 这几个测试的时候可以直接写死)

支付宝退款功能开发_第3张图片

这个是我的boss后台,我的程序是这样的,在这里点击确认退款后,就调用我上面写的方法
结果后台还是出问题了(抛异常:sign无效, 也有的是app_id无效等等)
看到这些问题的时候,不要慌,因为这个很可能不是你程序写的问题。(我之前支付用的是MD5加密的,而本次用的是RSA加密)

支付宝退款功能开发_第4张图片

这里的数据一定要是和公司支付宝账号的信息完全对应,想到这里果断联系上级领导,要到了公司支付宝的账号和密码
登录成功后,我们找到了app_id

支付宝退款功能开发_第5张图片

在公司logo头像下找到“账号管理”

支付宝退款功能开发_第6张图片

点进去,看看是否设置了RSA秘钥,且要确保和你在程序中的配置的一模一样

支付宝退款功能开发_第7张图片

支付宝退款功能开发_第8张图片
对应的私钥如果忘记的话,要重新生成公钥并上传,私钥一定要记住并放到你的程序中

(生成RSA公钥和私钥工具)这个可以直接在支付宝开放平台上下载就好了

支付宝退款功能开发_第9张图片
用这个动动生成你需要的公钥和私钥,公钥要上传到上面说的那个支付宝的开放平台上。对于java开发人员的话,要特别注意

支付宝退款功能开发_第10张图片

生成的这个文件才是你要的私钥哦。(这里有个插曲,上传公钥的时候,需要老板将收到的短信验证码给到你……)
私钥和公钥是一对,切记,你上传到支付宝开放平台上的那个公钥对应的私钥如果忘记了,那你就要用工具重新再生成一对公钥和私钥了,还要再问老板要验证码重新上传新的公钥……甚是麻烦
OK,现在,就没问题了。
测试效果如下

支付宝退款功能开发_第11张图片

你可能感兴趣的:(小项目总结,支付宝退款功能开发,sign无效,app_id无效,验签失败)