国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【業(yè)務(wù)功能篇104】 補(bǔ)充【業(yè)務(wù)功能篇99】微服務(wù)-springcloud-springboot-電商訂單模塊--整合支付

這篇具有很好參考價(jià)值的文章主要介紹了【業(yè)務(wù)功能篇104】 補(bǔ)充【業(yè)務(wù)功能篇99】微服務(wù)-springcloud-springboot-電商訂單模塊--整合支付。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在前面我們業(yè)務(wù)功能篇98-99中,我們介紹了電商項(xiàng)目中的訂單模塊服務(wù),那么最后就是需要進(jìn)行支付動作,那么我們這里就通過訂閱第三方平臺支付寶的支付調(diào)用接口功能,來進(jìn)一步完成訂單提交后的支付動作,支付寶的接口使用可以登錄官網(wǎng)開發(fā)指南詳情去了解

SDK依賴引入

在我們對應(yīng)需要進(jìn)行支付調(diào)用的訂單服務(wù)中的pom文件加入依賴,其他服務(wù)不涉及的不需要加

        <!-- 支付寶SDK -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.31.12.ALL</version>
        </dependency>

配置支付寶的配置文件類

  • 根據(jù)支付寶的接口使用方式,傳遞對應(yīng)訂單封裝類對象,進(jìn)行支付操作,并且還有同步回調(diào)地址,在支付完成之后自動跳轉(zhuǎn)到我們指定頁面
  • ?回調(diào)地址:public static String return_url = "http://order.msb.com/orderPay/returnUrl"; 指定到該接口,該接口會進(jìn)行支付完成后需要的操作,比如修改訂單的狀態(tài)為已完成,發(fā)貨狀態(tài)為待發(fā)貨等等.. 然后return指定的html訂單詳情頁面list.html


/**
 * 支付寶的配置文件
 */
//@ConfigurationProperties(prefix = "alipay")
@Component
@Data
public class AlipayTemplate {

    // 商戶appid 沙箱賬號: tklalf8880@sandbox.com
    public static String APPID = "2021000121601310";
    // 私鑰 pkcs8格式的
    public static String RSA_PRIVATE_KEY = "xx";
    // 服務(wù)器異步通知頁面路徑 需http://或者h(yuǎn)ttps://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
    public static String notify_url = "http://order.msb.com/payed/notify";
    // 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://或者h(yuǎn)ttps://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問 商戶可以自定義同步跳轉(zhuǎn)地址
    public static String return_url = "http://order.msb.com/orderPay/returnUrl";
    // 請求網(wǎng)關(guān)地址
    public static String URL = "https://openapi.alipaydev.com/gateway.do";
    // 編碼
    public static String CHARSET = "UTF-8";
    // 返回格式
    public static String FORMAT = "json";
    // 支付寶公鑰
    public static String ALIPAY_PUBLIC_KEY = "xx";
    // 日志記錄目錄
    public static String log_path = "/log";
    // RSA2
    public static String SIGNTYPE = "RSA2";

    public String pay(PayVo payVo){
        // SDK 公共請求類,包含公共請求參數(shù),以及封裝了簽名與驗(yàn)簽,開發(fā)者無需關(guān)注簽名與驗(yàn)簽
        //調(diào)用RSA簽名方式
        AlipayClient client = new DefaultAlipayClient(URL,
                APPID,
                RSA_PRIVATE_KEY,
                FORMAT,
                CHARSET,
                ALIPAY_PUBLIC_KEY,
                SIGNTYPE);
        AlipayTradeWapPayRequest alipay_request=new AlipayTradeWapPayRequest();

        // 封裝請求支付信息
        AlipayTradeWapPayModel model=new AlipayTradeWapPayModel();
        model.setOutTradeNo(payVo.getOut_trader_no());
        model.setSubject(payVo.getSubject());
        model.setTotalAmount(payVo.getTotal_amount());
        model.setBody(payVo.getBody());
        model.setTimeoutExpress("5000");
        model.setProductCode("11111");
        alipay_request.setBizModel(model);
        // 設(shè)置異步通知地址
        alipay_request.setNotifyUrl(notify_url);
        // 設(shè)置同步地址
        alipay_request.setReturnUrl(return_url);

        // form表單生產(chǎn)
        String form = "";
        try {
            // 調(diào)用SDK生成表單
            form = client.pageExecute(alipay_request).getBody();
            return form;
        } catch (AlipayApiException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return  null;
    }
}

支付接口?

controller層??

payOrder:在訂單頁面中,點(diǎn)擊 支付寶發(fā)起支付請求的方法
orderPay:支付完成之后,會同步回調(diào)到訂單詳情的方法,同時(shí)執(zhí)行支付完成后需要的動作,比如修改訂單狀態(tài)為 關(guān)閉, 發(fā)貨狀態(tài)為待發(fā)貨等等..
@Controller
public class OrderWebController {

    @Autowired
    private OrderService orderService;

    @Autowired
    AlipayTemplate alipayTemplate;

 /**
     * 獲取訂單相關(guān)信息
     * 然后跳轉(zhuǎn)到支付頁面  tklalf8880@sandbox.com
     * @param orderSn
     * @return
     */
    @GetMapping(value = "/payOrder",produces = "text/html")
    @ResponseBody
    public String payOrder(@RequestParam("orderSn") String orderSn){
        // 根據(jù)訂單編號查詢出相關(guān)的訂單信息,封裝到PayVO中
        PayVo payVo = orderService.getOrderPay(orderSn);
        String pay = alipayTemplate.pay(payVo);
        //System.out.println(pay);
        return pay;
    }

    @GetMapping("/orderPay/returnUrl")
    public String orderPay(@RequestParam(value = "orderSn",required = false) String orderSn,
                           @RequestParam(value = "out_trade_no",required = false) String out_trade_no){
        // TODO 完成相關(guān)的支付操作
        System.out.println("orderSn = " + orderSn);
        if(StringUtils.isNotBlank(orderSn)){
            orderService.handleOrderComplete(orderSn);

        }else{
            //orderService.updateOrderStatus(out_trade_no,OrderConstant.OrderStateEnum.TO_SEND_GOODS.getCode());
            orderService.handleOrderComplete(out_trade_no);
        }
        return "list";
    }

service層

    @Override
//封裝訂單號對應(yīng)的信息 返回給支付寶配置類的方法
    public PayVo getOrderPay(String orderSn) {
        // 根據(jù)訂單號查詢相關(guān)的訂單信息
        OrderEntity orderEntity = this.getBaseMapper().getOrderByOrderSn(orderSn);
        // 通過訂單信息封裝 PayVO對象
        PayVo payVo = new PayVo();
        payVo.setOut_trader_no(orderSn);
        payVo.setTotal_amount(orderEntity.getTotalAmount().setScale(2, RoundingMode.UP).toString());
        // 訂單名稱和訂單描述
        payVo.setSubject(orderEntity.getOrderSn());
        payVo.setBody(orderEntity.getOrderSn());
        return payVo;
    }


    @Override
    //支付完成之后,修改訂單狀態(tài)
    public void handleOrderComplete(String orderSn) {
        // 1.更新訂單狀態(tài)
        this.updateOrderStatus(orderSn,OrderConstant.OrderStateEnum.TO_SEND_GOODS.getCode());
        // TODO
        // 2.更新庫存信息 庫存數(shù)量遞減

        // 3.購物車中的已經(jīng)支付的商品移除

        // 4.更新會員積分 ....
    }

前端核心請求跳轉(zhuǎn)

?

   <form action="/orderPay/returnUrl" method="get">
              <input type="hidden" name="orderSn" th:value="${orderResponseVO.orderEntity.orderSn}">
              <li>
                <input type="submit" value="立即支付">

              </li>
            </form>


		  <li>
            <img src="/static/order/pay/img\zhifubao.png" style="weight:auto;height:30px;" alt="">
            <a th:href="'/payOrder?orderSn='+${orderResponseVO.orderEntity.orderSn}">
              支付寶
            </a>

          </li>

支付寶支付完成之后的回調(diào)請求需要放過攔截器,否則會報(bào)錯需要重新登錄的,因?yàn)槭遣煌囊粋€(gè)域名跳轉(zhuǎn),所以之前保存的用戶登錄session會話就不會帶過來,所以需要放過這個(gè)請求接口

new AntPathMatcher().match("/orderPay/**", requestURI)

public class AuthInterceptor implements HandlerInterceptor {

    public static ThreadLocal threadLocal = new ThreadLocal();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 支付寶的回調(diào)我們放過
        String requestURI = request.getRequestURI();

        boolean match = new AntPathMatcher().match("/orderPay/**", requestURI);
        if(match){
            return true;
        }
        // 通過HttpSession獲取當(dāng)前登錄的用戶信息
        HttpSession session = request.getSession();
        Object attribute = session.getAttribute(AuthConstant.AUTH_SESSION_REDIS);
        if(attribute != null){
            MemberVO memberVO = (MemberVO) attribute;
            threadLocal.set(memberVO);
            return true;
        }
        // 如果 attribute == null 說明沒有登錄,那么我們就需要重定向到登錄頁面
        session.setAttribute(AuthConstant.AUTH_SESSION_MSG,"請先登錄");
        response.sendRedirect("http://auth.msb.com/login.html");
        return false;
    }
}

?文章來源地址http://www.zghlxwxcb.cn/news/detail-707763.html

到了這里,關(guān)于【業(yè)務(wù)功能篇104】 補(bǔ)充【業(yè)務(wù)功能篇99】微服務(wù)-springcloud-springboot-電商訂單模塊--整合支付的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包