欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本

 更新時(shí)間:2019年11月12日 10:36:37   作者:濤先森の日常  
這篇文章主要介紹了Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前期準(zhǔn)備:

螞蟻金融開放平臺(tái)進(jìn)行登錄操作

進(jìn)入我的開放平臺(tái)

在上方找到沙箱,進(jìn)入沙箱(網(wǎng)絡(luò)編程虛擬執(zhí)行環(huán)境)。

這里的RSA2密鑰設(shè)置下,我已經(jīng)設(shè)置好了,所以便有了支付寶公鑰(公鑰是對外公開的,私鑰是自己保留的具體的不多做解釋)

至于RSA2密鑰的生成,可參考如下操作:

生成后在工具文件夾如下路徑可以查看自己生成的公鑰和私鑰一對

私鑰保留,公鑰設(shè)置到開發(fā)者平臺(tái)RSA2上便可以了。

官方DEMO因?yàn)槲覀冃枰恍﹋ar包和可參考類,所以拿個(gè)DEMO方便很多

所需要的jar包路徑如下

實(shí)例編寫:

工具我這里用的是eclipse,這個(gè)影響不大~

新建web項(xiàng)目

項(xiàng)目所需要的類如下

AlipayConfig.java

package cn.taosir.demo;

public class AlipayConfig {
  // 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù)
  public static String return_url = "http://localhost:8080/success.jsp";
  // 服務(wù)器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
  public static String notify_url = "http://localhost:8080/notify";
  // 應(yīng)用ID,您的APPID,收款賬號既是您的APPID對應(yīng)支付寶賬號
  public static String app_id = "";
  // 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應(yīng)APPID下的支付寶公鑰。
  public static String alipay_public_key = "";
  // 商戶私鑰,您的PKCS8格式RSA2私鑰
  public static String merchant_private_key = "";
  // 簽名方式
  public static String sign_type = "RSA2";
  // 字符編碼格式
  public static String charset = "utf-8";
  // 支付寶網(wǎng)關(guān)
  public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}

APPID(在查看支付寶公鑰位置上方)、支付寶公鑰、自己的私鑰,記得配上

NoitfyServlet.java

package cn.taosir.demo;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/notify")
public class NotifyServlet extends HttpServlet{
  @Override
  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("接收到支付寶的異步通知請求——");
    Map<String,String[]> parameterMap=request.getParameterMap();
    System.out.println(parameterMap);
    //成功處理后返回success
    response.getWriter().write("success");
  }
}

OrderServlet.java

package cn.taosir.demo;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;

@WebServlet("/order/confirm")
public class OrderServlet extends HttpServlet{
  @Override
  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("開始處理OrderServlet的服務(wù)");
    String title = "濤先森";
    String total = "666666";
    String message = "如有什么建議歡迎留言評論";
    //生成訂單號
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    String orderSn = simpleDateFormat.format(Calendar.getInstance().getTime());
    //向支付寶發(fā)送請求
    //獲得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
        AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
        AlipayConfig.sign_type);
    //設(shè)置請求參數(shù)
    AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
    alipayRequest.setReturnUrl(AlipayConfig.return_url);
    alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
    //商戶訂單號,商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號,必填
    String out_trade_no = orderSn;
    //付款金額,必填
    String total_amount = total;
    //訂單名稱,必填
    String subject = title;
    //商品描述,可空
    String body = message;
    alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\""
        + total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
        + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
    //若想給BizContent增加其他可選請求參數(shù),以增加自定義超時(shí)時(shí)間參數(shù)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\"}");
    //請求參數(shù)可查閱【電腦網(wǎng)站支付的API文檔-alipay.trade.page.pay-請求參數(shù)】章節(jié)
    AlipayTradePagePayResponse alipayResponse = null;
    try {
      alipayResponse=alipayClient.pageExecute(alipayRequest);
      System.out.println(alipayResponse.getBody());
       System.out.println(alipayResponse.getMsg());
    } catch (AlipayApiException e) {
      e.printStackTrace();
    }
    response.setContentType("text/html;charset=UTF-8");
    response.getWriter().write(alipayResponse.getBody());
  }
}

至此,大功告成

下面開始測試

將項(xiàng)目部署到tomcat上run起來

http://localhost:8080/alipay-demo/order/confirm 可以看到頁面通過該請求跳轉(zhuǎn)到了支付寶的接口

下載沙箱環(huán)境的支付寶APP可以掃碼測試喔

這里我們點(diǎn)擊右邊登錄賬戶付款

賬號和密碼可在沙箱平臺(tái)查看個(gè)人賬號

之后登錄就支付了,正常就跳轉(zhuǎn)到了支付成功頁面。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot監(jiān)控Tomcat活動(dòng)線程數(shù)來判斷是否完成請求處理方式

    SpringBoot監(jiān)控Tomcat活動(dòng)線程數(shù)來判斷是否完成請求處理方式

    這篇文章主要介紹了SpringBoot監(jiān)控Tomcat活動(dòng)線程數(shù)來判斷是否完成請求處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • JAVA?IDEA?打開assert?設(shè)置方式

    JAVA?IDEA?打開assert?設(shè)置方式

    這篇文章主要介紹了JAVA?IDEA?打開assert?設(shè)置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Struts 2中實(shí)現(xiàn)Ajax的三種方式

    Struts 2中實(shí)現(xiàn)Ajax的三種方式

    這篇文章主要介紹了Struts 2中實(shí)現(xiàn)Ajax的三種方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • java實(shí)現(xiàn)冒泡排序算法

    java實(shí)現(xiàn)冒泡排序算法

    冒泡排序(Bubble Sort)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。
    2015-04-04
  • Netty分布式行解碼器邏輯源碼解析

    Netty分布式行解碼器邏輯源碼解析

    這篇文章主要為大家介紹了Netty分布式行解碼器邏輯源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 詳解Java的Struts框架中上傳文件和客戶端驗(yàn)證的實(shí)現(xiàn)

    詳解Java的Struts框架中上傳文件和客戶端驗(yàn)證的實(shí)現(xiàn)

    這篇文章主要介紹了Java的Struts框架中上傳文件和客戶端驗(yàn)證的實(shí)現(xiàn),Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Java計(jì)算代碼段執(zhí)行時(shí)間的詳細(xì)過程

    Java計(jì)算代碼段執(zhí)行時(shí)間的詳細(xì)過程

    java里計(jì)算代碼段執(zhí)行時(shí)間可以有兩種方法,一種是毫秒級別的計(jì)算,另一種是更精確的納秒級別的計(jì)算,這篇文章主要介紹了java計(jì)算代碼段執(zhí)行時(shí)間,需要的朋友可以參考下
    2023-02-02
  • 解決Spring Cloud中Feign/Ribbon第一次請求失敗的方法

    解決Spring Cloud中Feign/Ribbon第一次請求失敗的方法

    這篇文章主要給大家介紹了關(guān)于解決Spring Cloud中Feign/Ribbon第一次請求失敗的方法,文中給出了三種解決的方法,大家可以根據(jù)需要選擇對應(yīng)的方法,需要的朋友們下面來一起看看吧。
    2017-02-02
  • java設(shè)計(jì)模式--原型模式詳解

    java設(shè)計(jì)模式--原型模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之Prototype原型模式的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 關(guān)于Hadoop中Spark?Streaming的基本概念

    關(guān)于Hadoop中Spark?Streaming的基本概念

    這篇文章主要介紹了關(guān)于Hadoop中Spark?Streaming的基本概念,Spark?Streaming是構(gòu)建在Spark上的實(shí)時(shí)計(jì)算框架,它擴(kuò)展了Spark處理大規(guī)模流式數(shù)據(jù)的能力,Spark?Streaming可結(jié)合批處理和交互式查詢,需要的朋友可以參考下
    2023-07-07

最新評論