支付宝支付 - 构建支付表单填并提交

/**
 *
 * @Description: 前往支付宝进行支付
 * @return
 * @throws Exception
 */
@ResponseBody
@RequestMapping(value="/goAlipay")
public JSONResult goAlipay(String merchantOrderId, String merchantUserId) throws Exception{

	// 查询订单详情
	Orders waitPayOrder = paymentOrderService.queryOrderByStatus(merchantUserId, merchantOrderId, PaymentStatus.WAIT_PAY.type);

	//获得初始化的AlipayClient
	AlipayClient alipayClient = new DefaultAlipayClient(aliPayResource.getGatewayUrl(),
														aliPayResource.getAppId(),
														aliPayResource.getMerchantPrivateKey(),
														"json",
														aliPayResource.getCharset(),
														aliPayResource.getAlipayPublicKey(),
														aliPayResource.getSignType());

	//设置请求参数
	AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
	alipayRequest.setReturnUrl(aliPayResource.getReturnUrl());
	alipayRequest.setNotifyUrl(aliPayResource.getNotifyUrl());

	// 商户订单号, 商户网站订单系统中唯一订单号, 必填
	String out_trade_no = merchantOrderId;
	// 付款金额, 必填 单位元
	String total_amount = CurrencyUtils.getFen2YuanWithPoint(waitPayOrder.getAmount());
//    	String total_amount = "0.01";	// 测试用 1分钱
	// 订单名称, 必填
	String subject = "天天吃货-付款用户[" + merchantUserId + "]";
	// 商品描述, 可空, 目前先用订单名称
	String body = subject;

	// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
	String timeout_express = "1d";

	alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
			+ "\"total_amount\":\""+ total_amount +"\","
			+ "\"subject\":\""+ subject +"\","
			+ "\"body\":\""+ body +"\","
			+ "\"timeout_express\":\""+ timeout_express +"\","
			+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

	//若想给BizContent增加其他可选请求参数, 以增加自定义超时时间参数timeout_express来举例说明
	//alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
	//		+ "\"total_amount\":\""+ total_amount +"\","
	//		+ "\"subject\":\""+ subject +"\","
	//		+ "\"body\":\""+ body +"\","
	//		+ "\"timeout_express\":\"10m\","
	//		+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
	//请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节

	//请求
	String alipayForm = "";
	try {
		alipayForm = alipayClient.pageExecute(alipayRequest).getBody();
	} catch (AlipayApiException e) {
		e.printStackTrace();
	}

	log.info("支付宝支付 - 前往支付页面, alipayForm: \n{}", alipayForm);

	return JSONResult.ok(alipayForm);
}
//@Configuration
@Component
@ConfigurationProperties(prefix="alipay")
@PropertySource("classpath:alipay.properties")
public class AliPayResource {

	private String appId;
	private String merchantPrivateKey;
	private String alipayPublicKey;

	private String notifyUrl;
	private String returnUrl;

	private String signType;
	private String charset;
	private String gatewayUrl;

	public String getAppId() {
		return appId;
	}

	public void setAppId(String appId) {
		this.appId = appId;
	}

	public String getMerchantPrivateKey() {
		return merchantPrivateKey;
	}

	public void setMerchantPrivateKey(String merchantPrivateKey) {
		this.merchantPrivateKey = merchantPrivateKey;
	}

	public String getAlipayPublicKey() {
		return alipayPublicKey;
	}

	public void setAlipayPublicKey(String alipayPublicKey) {
		this.alipayPublicKey = alipayPublicKey;
	}

	public String getNotifyUrl() {
		return notifyUrl;
	}

	public void setNotifyUrl(String notifyUrl) {
		this.notifyUrl = notifyUrl;
	}

	public String getReturnUrl() {
		return returnUrl;
	}

	public void setReturnUrl(String returnUrl) {
		this.returnUrl = returnUrl;
	}

	public String getSignType() {
		return signType;
	}

	public void setSignType(String signType) {
		this.signType = signType;
	}

	public String getCharset() {
		return charset;
	}

	public void setCharset(String charset) {
		this.charset = charset;
	}

	public String getGatewayUrl() {
		return gatewayUrl;
	}

	public void setGatewayUrl(String gatewayUrl) {
		this.gatewayUrl = gatewayUrl;
	}
}
# 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
alipay.appId=2109000001011231
# 商户私钥,您的PKCS8格式RSA2私钥		(这里我用的商户应用私钥,也就是支付宝RSA签名验签工具)
alipay.merchantPrivateKey=MIAt5jdP8Kk1mcM/QYyZnXXKO/C2pCNg/qIwhxQ4criC/cNWCaqQRKemL/Lgjh
# 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
alipay.alipayPublicKey=Bgkq164UdIS4/T3XamGmxPX/VUgxikfvLav6N/O+EA85Pm4Mb/ujg8IDAQAB

# 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
#alipay.notifyUrl=http://2r49yp.natappfree.cc/payment/notice/alipay
alipay.notifyUrl=http://payment.t.xuexi.com/payment/payment/notice/alipay
# 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
alipay.returnUrl=http://payment.t.xuexi.com/payment/alipayResult
#alipay.returnUrl=http://shop.t.xuexi.com/payment

# 签名方式
alipay.signType=RSA2
# 字符编码格式
alipay.charset=utf-8
# 支付宝网关
alipay.gatewayUrl=https://openapi.alipay.com/gateway.do

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值