参考博客:
易错点:
1.app_id是沙箱应用中的id
2.merchant_private_key是开发助手生成的应用私钥
3.alipay_public_key是指:将应用公钥配置到沙箱环境中点击查看后获取到的支付的公钥
4.notify_url和return_url非必填项
5.支付提示支付失败,错误代码(ALIN10009)
解决方法:
①卸载沙箱支付宝,重新安装
②检查网络状况
③跟换手机,重新登录支付
④如果实在不行,联系客服。
我在测试的时候一直提示支付失败,在代码没有改动的情况下,过了一天,尽然好了。。。。(当天测试时间为周日下午,可能和它维修有关。)
这个我感觉是沙箱环境本身存在的问题。
正式代码
使用工具idea,jdk1.8
1.Controller
/* 订单接口 */
@CrossOrigin
@RestController
@RequestMapping("order")
public class OrderController {
@Resource
private PayService payService;//调用支付服务
@RequestMapping("alipayTwo")
public void alipayTwo(HttpServletResponse httpResponse) throws IOException {
payService.alipayTwo(httpResponse);
}
}
2.Service的实现层
在这里需要注意一点:product_code必传(好坑啦,最后下载了官方demo才发现的)
api上写的可选。。。
/* 支付服务 */
@Service
public class PayServiceImpl implements PayService {
@Override
public void alipayTwo(HttpServletResponse httpResponse) throws IOException {
//实例化客户端,填入所需参数
AlipayClient alipayClient = new DefaultAlipayClient(CommonUtil.GATEWAY_URL, CommonUtil.APP_ID, CommonUtil.APP_PRIVATE_KEY, CommonUtil.FORMAT, CommonUtil.CHARSET, CommonUtil.ALIPAY_PUBLIC_KEY, CommonUtil.SIGN_TYPE);
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//在公共参数中设置回跳和通知地址
alipayRequest.setReturnUrl(CommonUtil.RETURN_URL);
alipayRequest.setNotifyUrl(CommonUtil.NOTIFY_URL);
//商户订单号,商户网站订单系统中唯一订单号,必填
//生成随机Id
String out_trade_no = UUID.randomUUID().toString().substring(0,8);
//付款金额,必填
String total_amount =Integer.toString(1);
//订单名称,必填
String subject ="测试";
//商品描述,可空
String body = "测试";
JSONObject jsonObject = new JSONObject();
jsonObject.put("out_trade_no",out_trade_no);
jsonObject.put("total_amount",total_amount);
jsonObject.put("subject",subject);
jsonObject.put("body",body);
jsonObject.put("product_code","FAST_INSTANT_TRADE_PAY");
alipayRequest.setBizContent(jsonObject.toString());
/*alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");*/
String form = "";
try {
form = alipayClient.pageExecute(alipayRequest).getBody(); // 调用SDK生成表单
} catch (AlipayApiException e) {
e.printStackTrace();
}
httpResponse.setContentType("text/html;charset=" + CommonUtil.CHARSET);
httpResponse.getWriter().write(form);// 直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
}
}
3.前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
<div id="form">
</div>
<input type="button" id="submit" value="提交" style="width:80px;height:100px;color:red; background-color:#3FF">
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script>
$(function () {
$("#submit").click(function () {
$.ajax({
type:'get',
url:'http://urqr2sq.hn3.mofasuidao.cn/order/alipayTwo',
data:'',
dataType:'html',
success:function (data) {
console.log(data);
$("#form").html(data);
}
})
})
</script>
</html>