1. 程式人生 > 實用技巧 >Java簡單呼叫支付寶當面付生成支付二維碼

Java簡單呼叫支付寶當面付生成支付二維碼

package com.tony.alipaycollection.service.impl;
 
 
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePrecreateModel;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest; import com.alipay.api.response.AlipayTradePrecreateResponse; import com.alipay.api.response.AlipayTradeQueryResponse; import com.tony.alipaycollection.config.ApiException; import com.tony.alipaycollection.config.RetEnum; import com.tony.alipaycollection.consts.AlipayConsts;
import com.tony.alipaycollection.service.AlipayService; import com.tony.alipaycollection.vo.AlipayBean; import com.tony.alipaycollection.vo.AlipayJsonRootBean; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Map; /** * @author tony * @date 2020/8/19 13:42
*/ @Slf4j @Service public class AlipayServiceImpl implements AlipayService { /**支付寶請求地址*/ private static String aliUrl = "https://openapi.alipay.com/gateway.do"; /**支付寶應用ID*/ private static String aliAppId = "11223344"; /**本地通過"支付寶開放平臺開發助手"生成的私鑰*/ private static String aliAppPrivateKey = "ABCD123"; /**支付寶應用設定本地公鑰後生成對應的支付寶公鑰(非本地生成的公鑰)*/ private static String alipayPublicKey = "ABCD123";; /**支付寶回撥的介面地址*/ private static String aliNotifyUrl = "http://localhost:8080/alinotify"; @Override public String newAliOrder() throws Exception { log.info("開始呼叫支付寶生成支付二維碼..."); //例項化客戶端 AlipayClient alipayClient = new DefaultAlipayClient(aliUrl, aliAppId, aliAppPrivateKey, "json", "utf-8", alipayPublicKey, "RSA2"); //設定請求引數 AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); model.setOutTradeNo("20200826888888888888888"); model.setTotalAmount("1"); model.setSubject("充值"); //如果沒有店鋪號可不設定 model.setStoreId("9527"); model.setQrCodeTimeoutExpress("10m"); request.setBizModel(model); //支付寶非同步通知地址 request.setNotifyUrl(aliNotifyUrl); log.info("建立支付寶訂單,請求引數:{} ", JSONObject.toJSONString(request)); //呼叫介面 AlipayTradePrecreateResponse response = alipayClient.execute(request); log.info("建立支付寶訂單,返回值:{} ", JSONObject.toJSONString(response)); if (!response.isSuccess()) { throw new ApiException(RetEnum.MachineOrderAlipayException); } AlipayJsonRootBean alipayJsonRootBean = JSONObject.parseObject(response.getBody(), AlipayJsonRootBean.class); if(!AlipayConsts.SuccessCode.equals(alipayJsonRootBean.getAlipay_trade_precreate_response().getCode())){ throw new ApiException(RetEnum.MachineOrderAlipayException); } log.info("交易訂單號outTradeNo:{} ", response.getOutTradeNo()); log.info("支付二維碼qrCode:{} ", response.getQrCode()); return response.getQrCode(); } @Override public void aliNotify(Map<String, String> param) throws Exception { log.info("支付寶非同步回撥介面資料處理"); //只有支付成功後,支付寶才會回撥應用介面,可直接獲取支付寶響應的引數 String order_id = param.get(AlipayConsts.AliOutTradeNo); //出於安全考慮,通過支付寶回傳的訂單號查詢支付寶交易資訊 AlipayTradeQueryResponse aliResp = queryOrder(order_id); if (!AlipayConsts.SuccessCode.equals(aliResp.getCode())) { //返回值非10000 throw new ApiException(RetEnum.MachineOrderAlipayException, aliResp.getSubMsg()); } if (!AlipayConsts.AliTradeSuccess.equals(aliResp.getTradeStatus()) && !AlipayConsts.AliTradeFinished.equals(aliResp.getTradeStatus())) { //支付寶訂單狀態不是支付成功 throw new ApiException(RetEnum.MachineOrderAliUnPay); } //可對支付寶響應引數AlipayTradeQueryResponse進行處理 } @Override public AlipayTradeQueryResponse queryOrder(String orderId) throws Exception { log.info("查詢支付寶訂單,訂單編號為:{}", orderId); AlipayClient alipayClient = new DefaultAlipayClient(aliUrl, aliAppId, aliAppPrivateKey, "json", "utf-8", alipayPublicKey, "RSA2"); AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); AlipayTradeQueryModel model = new AlipayTradeQueryModel(); model.setOutTradeNo(orderId); request.setBizModel(model); AlipayTradeQueryResponse response = alipayClient.execute(request); log.info("查詢支付寶訂單,返回資料:{}", response); return response; } }

maven依賴:

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.10.97.ALL</version>
</dependency>

完整程式碼:https://github.com/zhongzhihao1995/alipaycollection.git