支付宝扫码支付、APP支付

新版支付宝手机网站支付、支付宝pc支付、支付宝无密退款实现

这些已经介绍过,下面扫码支付也是用IJPay,导入alipay-sdk-java2017xxxxxxxx.jar,如何导入上篇已经介绍过

<dependency>  
      <groupId>com.github.javen205</groupId>  
      <artifactId>IJPay</artifactId>  
      <version>0.8</version>  
</dependency>  
支付宝接口社区精华帖集锦-接口样例、常见问题: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;
	}

请求tradePrecreatePayd.do    打印的jsonobject----------

{"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插件生成的二维码

<div id="output"></div>
<script src="/js/jquery-1.10.2.min.js"></script>
<script src="/js/jquery.qrcode.min.js"></script>
<script>
code();
function code() {
var code='${qrcode}';
/*jquery二维码生成插件生成二维码*/
jQuery(function () {
jQuery("#output").qrcode(code);
})
}
</script>
这个方式就自己选择吧,最后生成二维码扫描支付即可,notify_url异步返回代码上篇有这里就不贴了
我测试有一个问题,支付没有回调notify_url,因为支付宝别的支付在局域网测试就可以,所以我就没用域名,而扫码支付得用域名访问才会回调成功!!!

demo是基于SpringMVC的,扫码支付应该没加,自己加上,配置好改成自己的信息就可以测试,http://download.csdn.net/download/goligory/10048415

相关链接:http://blog.csdn.net/zyw_java/article/details/7143726




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;
}


生成形式如下;


将生成的orderInfo返回Android即可



猜你喜欢

转载自blog.csdn.net/Goligory/article/details/78413197