背景:在项目,需要用到支付功能,支付宝提供沙箱测试环境,阿里巴巴快打广告费…
一. 支付宝沙箱环境
1.1 注册账号
在准备之前,你得有一个账号,
https://open.alipay.com/platform/appDaily.htm?tab=info官网注册账号
1.2 创建研发应用
我用到的是网页&移动应用,你可以根据你的需要完成创建应用,按照提示创建即可,需要提交审核,名称不能包含阿里,支付宝等等,应用图标不能为常见的图标,存在侵权,等待审核通过。
接下来,配置沙箱配置,APPID,支付宝网关保持默认就好,设置RSA2(SHA256)密钥(推荐):点击感叹号!
,进入生成。
近期上线了在线生成密钥,点击生成密钥,保存密钥,后面会用到。
将应用公钥设置到RSA2(SHA256)密钥(推荐),选择加签模式为公钥,保存设置,会生成一个支付宝公钥,保存一下,后面会用到。
授权回调地址可以选填,后面有说明。
1.3 沙箱账号
在沙箱应用中,有下载沙箱测试APP二维码,目前只有Android的,根据你的沙箱账号登录即可。
二. 接入项目
2.1 配置类
@Configuration
public class AlipayConfig {
//填写您的AppId(必填)
private static final String APP_ID = "";
//应用私钥(必填)
private static final String APP_PRIVATE_KEY ="";
//支付宝公钥,而非应用公钥(必填)
public static final String ALIPAY_PUBLIC_KEY = "";
//默认即可(必填)
public static final String CHARSET = "utf-8";
//默认即可(必填)
public static final String SIGN_TYPE = "RSA2";
@Bean
public AlipayClient alipayClient(){
return new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do",
APP_ID,
APP_PRIVATE_KEY,
"json",
CHARSET,
ALIPAY_PUBLIC_KEY,
SIGN_TYPE);
}
}
2.2 实现类
- 不知道为什么这种方式用了,报
订单信息无法识别,请联系卖家的错误
,修改了参数,还是不行。存在钓鱼风险提示页面
request.setBizContent("{" +
"\"out_trade_no\":\"20150320010101001\"," +
"\"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +
"\"total_amount\":88.88," +
"\"subject\":\"Iphone6 16G\"," +
"\"body\":\"Iphone6 16G\"" +
"}"}
修改为直接设置
public String alipayTradePagePay(Order order) throws AlipayApiException {
//实例化客户端
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
String outTradeNo = UUID.randomUUID().toString().replace("-", "");
// 设置支付信息
model.setOutTradeNo(outTradeNo);
model.setProductCode("FAST_INSTANT_TRADE_PAY");
model.setSubject("");
model.setTotalAmount("");
model.setTimeoutExpress("30m");
request.setBizModel(model);
// 设置回调地址
request.setReturnUrl("");//支付成功后返回的页面
request.setNotifyUrl("");//回调的页面,用来执行支付成功后的接口调用
try {
// 返回支付页面
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
// System.out.println(response.getBody());//输出的就是Form表单
return response.getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
return null;
}
request.setNotifyUrl("");
地址需要公网能够访问,最好使用域名。在下面填写你的授权回调地址。
出现问题,可以通过https://opensupport.alipay.com/support/tools/cloudparse?ant_source=openmonitor排查。
- vue
handlerAlipay:function(){
axios.post(url, this.order)
.then(response => {
console.log(response);
document.querySelector('body').innerHTML = response.data;//查找到当前页面的body,将后台返回的form替换掉他的内容
document.forms[0].submit(); //执行submit表单提交,让页面重定向,跳转到支付宝页面
}).catch(err => {
console.log(err);
})
},
三. 测试