新版支付宝手机网站支付、支付宝pc支付、支付宝无密退款实现
这些已经介绍过,下面扫码支付也是用IJPay,导入alipay-sdk-java2017xxxxxxxx.jar,如何导入上篇已经介绍过
com.github.javen205
IJPay
0.8
支付宝接口社区精华帖集锦-接口样例、常见问题:https://openclub.alipay.com/read.php?tid=2019&fid=25
这个很不错,很多问题都得到了解决
开通扫码支付,看好官方文档
1商户系统调用支付宝预下单接口alipay.trade.precreate,获得该订单二维码图片地址。
2发起轮询获得支付结果:等待5秒后调用交易查询接口alipay.trade.query通过支付时传入的商户订单号(out_trade_no)查询支付结果(返回参数TRADE_STATUS),如果仍然返回等待用户付款(WAIT_BUYER_PAY),则再次等待5秒后继续查询,直到返回确切的支付结果(成功TRADE_SUCCESS 或 已撤销关闭TRADE_CLOSED),或是超出轮询时间。在最后一次查询仍然返回等待用户付款的情况下,必须立即调用交易撤销接口alipay.trade.cancel将这笔交易撤销,避免用户继续支付。
3除了主动轮询,也可以通过接受异步通知获得支付结果,详见扫码异步通知,注意一定要对异步通知做验签,确保通知是支付宝发出的。
调用接口:alipay.trade.precreate
直接上代码
/**
* 扫码支付 返回一个链接自己生成二维码 已测试
*
*/
@RequestMapping(value ="/tradePrecreatePay.do")
public String tradePrecreatePay(Model modelV) {
String subject = "支付宝扫码支付测试";
String totalAmount = "0.1";
String storeId = "123";
String notifyUrl = "http://192.168.0.148:8080/alipay/notify_url.do";
AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
model.setSubject(subject);
model.setTotalAmount(totalAmount);
model.setStoreId(storeId);
model.setTimeoutExpress("1m");
model.setOutTradeNo(StringUtils.getOutTradeNo());
try {
AliPayApiConfigKit.putApiConfig(getApiConfig());
String resultStr = AliPayApi.tradePrecreatePay(model, notifyUrl);
JSONObject jsonObject = JSONObject.parseObject(resultStr);
System.out.println("jsonobject--"+jsonObject);
String qrcode=jsonObject.getJSONObject("alipay_trade_precreate_response").getString("qr_code");
System.out.println(qrcode);
modelV.addAttribute("qrcode",qrcode);
return "success";
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
{"alipay_trade_precreate_response{"msg":"Success","code":"10000","out_trade_no":"110114055715095","qr_code":"https://qr.alipay.com/bax08974wxnhvq6xi5sf604a"},"sign":"签名"}
生成qrcode---------https://qr.alipay.com/bax08974wxnhvq6xi5sf604a 就是支付的二维码图片地址,将其生成二维码即可支付
将其返回,我用的是jquery插件生成的二维码
APP支付
官方文档:https://docs.open.alipay.com/204
客户端我就不说了,我这只说服务端提供的信息,调用生成orderInfo
* app支付
* 生成的orderInfo
*/
@RequestMapping(value = "/appPay.do")
@ResponseBody
public String appPay() {
try {
System.out.println("-----------------------------app pay start------------------------------");
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("我是测试数据-By Javen");
model.setSubject("App支付测试-By Javen");
model.setOutTradeNo(StringUtils.getOutTradeNo());
model.setTimeoutExpress("30m");
model.setTotalAmount("0.01");
model.setPassbackParams("callback params");
model.setProductCode("QUICK_MSECURITY_PAY");
System.out.println("-2-");
AliPayApiConfigKit.putApiConfig(getApiConfig());
System.out.println("-3-");
String orderInfo = AliPayApi.startAppPayStr(model, "http://xxx/alipay/notify_url.do");
System.out.println("orderInfo----------"+orderInfo);
return orderInfo;
} catch (AlipayApiException e) {
e.printStackTrace();
result.addError("system error:"+e.getMessage());
}
return null;
}