电脑网站支付开发(Alipay)
环境 : 开发者当前所在公司支付宝上线账号(配置SDK公共请求参数)
文档 : https://docs.open.alipay.com/270/alipay.trade.page.pay
下载SDK和demo : https://docs.open.alipay.com/270/106291/
支付过程 : 前端带订单参数请求后端,后端带 订单信息和验签参数(SDK配置) 生成请求支付宝的表单字符串:"<form>...</form><script>...</script>" 返回给前端,前端js用选择器 选择div的属性名.html(后端返回的数据) 得到支付二维码, 扫完之后回调return_url 和 notify_url
流程图:
Java Demo:
OrderPayPO order = new OrderPayPO(...);
insertEntity2Cache(order);
// SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
AlipayClient client = new DefaultAlipayClient(JinHonConfig.URL, JinHonConfig.APPID,
JinHonConfig.RSA_PRIVATE_KEY, JinHonConfig.FORMAT, JinHonConfig.CHARSET,
JinHonConfig.ALIPAY_PUBLIC_KEY,JinHonConfig.SIGNTYPE);
// 设置请求参数
AlipayTradePagePayRequest alipayRequest=new AlipayTradePagePayRequest();
// 设置异步通知地址
alipayRequest.setNotifyUrl(JinHonConfig.notify_url+notifyUrl);
// 设置同步地址
alipayRequest.setReturnUrl(JinHonConfig.return_url);
// 商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = order.getOrder_no();
// 订单名称,必填
String subject = order.getGoods_info();
// 付款金额,必填
String total_amount = order.getPay_amount().toString();
// 商品描述,可空
String body = order.getOrder_param();
// 超时时间 可空
String timeout_express = "10m";
//穿透参数(必须转码)*
String passback_params = "";try {
passback_params = URLEncoder.encode(session, "Utf-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 商品列表信息,可空
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"body\":\""+ body +"\","
+ "\"passback_params\":\"" +passback_params+"\","
+ "\"timeout_express\":\""+ timeout_express +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
// form表单生产
ReqAlipayParamVO alipayParam = new ReqAlipayParamVO();
try {
// 调用SDK生成表单
String form = client.pageExecute(alipayRequest).getBody();
return form ;//返回 :"<form>...</form><script>...</script>"
} catch (AlipayApiException e) {
e.printStackTrace();
JinHonApi.service.info(e.getErrMsg());
}
return "";