1. 程式人生 > >JAVA呼叫支付寶直充介面

JAVA呼叫支付寶直充介面

JAVA呼叫支付寶的直充介面原理和銀聯介面一樣,當商家和支付寶簽好協議後就可以問支付寶的人要相關的程式碼了。
我本地用的是支付寶UTF-8編碼的程式碼,先把util裡的東西達成一個alipay.jar檔案。然後編寫我們自己的呼叫和響應程式碼:

1.封裝支付寶需要的介面資料
@Description("會員中心資金帳戶支付寶充值")
 @CreatedInfo(creator = "hamano", date = "2008-09-22")
 public ModelAndView fundsDepositByAliPay(HttpServletRequest request,
   HttpServletResponse response) {
  RemindPageUtil remindPageUtil = new RemindPageUtil();
  Map<String, Object> paraMap = new HashMap<String, Object>();
  
  String paygateway = "

https://www.alipay.com/cooperate/gateway.do?"; // '支付介面
  String service = "create_direct_pay_by_user";// 快速付款交易服務
  String sign_type = "MD5";
  String out_trade_no = SnGenerator.generateUnionPaySn(); // 商戶網站訂單
  String input_charset = "utf-8";
  String key = ""; // 支付寶安全校驗碼(賬戶內提取)
  String partner= ""; // 支付寶合作伙伴id (賬戶內提取)
  String body = "商品描述"; // 商品描述,推薦格式:商品名稱(訂單編號:訂單編號)
  String total_fee ="0.01";// 訂單總價
  String payment_type = "1";// 支付寶型別.1代表商品購買
  String seller_email = "
[email protected]
"; // 賣家支付寶帳戶
  String subject = "商品名稱"; // 商品名稱
  String show_url = "http://www/foolpid.net/product/show_product.jsp";//商品顯示頁
  String notify_url = "http://www/foolpid.net/accountController.do?method=alipayNotify"; // 通知接收URL
  String return_url = "http://www/foolpid.net/accountController.do?method=alipayReturn"; // 支付完成後跳轉返回的網址URL
  String ItemUrl = Payment.CreateUrl(paygateway, service, sign_type,
    out_trade_no, input_charset, partner, key, show_url, body,
    total_fee, payment_type, seller_email, subject, notify_url,
    return_url);
//支付寶介面用POST傳輸,所以我自己寫了個將GET轉為POST的方法,程式碼在下面的程式中給出
  HttpClient http=new HttpClient(response);
  http.setParameter("body",body);
  http.setParameter("notify_url",notify_url);
  http.setParameter("out_trade_no",out_trade_no);
  http.setParameter("partner",partner);
  http.setParameter("payment_type",payment_type);
  http.setParameter("return_url",return_url);
  http.setParameter("seller_email",seller_email);
  http.setParameter("service",service);
  http.setParameter("show_url",show_url);
  http.setParameter("sign",ItemUrl);
  http.setParameter("sign_type",sign_type);
  http.setParameter("subject",subject);
  http.setParameter("total_fee",total_fee);
  try {
   http.sendByPost("
https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8
");
  } catch (IOException e) {
}
  return null;
 }

2.根據notify_url的設定響應支付寶介面
public ModelAndView alipayNotify(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  RemindPageUtil remindPageUtil = new RemindPageUtil();
  Map<String, Object> paraMap = new HashMap<String, Object>();
  String privateKey = ""; // 支付寶安全校驗碼(賬戶內提取)
  String partner= ""; // 支付寶合作伙伴id (賬戶內提取)

  String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?"
    + "&partner="
    + partner
    + "&notify_id="
    + request.getParameter("notify_id");

  // 獲取支付寶ATN返回結果,true是正確的訂單資訊,false 是無效的
  String responseTxt = CheckURL.check(alipayNotifyURL);

  Map params = new HashMap();
  // 獲得POST 過來引數設定到新的params中
  Map requestParams = request.getParameterMap();
  for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
   String name = (String) iter.next();
   String[] values = (String[]) requestParams.get(name);
   String valueStr = "";
   for (int i = 0; i < values.length; i++) {
    valueStr = (i == values.length - 1) ? valueStr + values[i]
      : valueStr + values[i] + ",";
   }
   params.put(name, valueStr);
  }
  String mysign = com.alipay.util.SignatureHelper.sign(params, privateKey);
  String orderId=request.getParameter("out_trade_no");
  String amount=request.getParameter("total_fee");
  if (mysign.equals(request.getParameter("sign"))
    &&responseTxt.equals("true")) {
   if("TRADE_FINISHED".equals(request.getParameter("trade_status"))){
    return null;
   }else{
System.out.println("支付失敗");   
}
   } else {
   System.out.println("支付失敗");   
   }
  return null;
 }

3.return_url的呼叫和前面一致,用於支付完成後的返回頁面

附註:將GET轉為POST的類
public class HttpClient {
 Map<String, String> parameter=new HashMap<String, String>();
 HttpServletResponse response;

 public HttpClient(HttpServletResponse response)
 {
    this.response=response;
 }
 public void setParameter(String key,String value)
 {
    this.parameter.put(key, value);
 }
 public void sendByPost(String url) throws IOException
 {
    this.response.setContentType("text/html");
    response.setCharacterEncoding("utf-8");
    PrintWriter out = this.response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
    out.println("<HTML>");
    out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
    out.println(" <BODY>");
    out.println("<form name=/"submitForm/" action=/""+url+"/" method=/"post/">");
      Iterator<String> it=this.parameter.keySet().iterator();
    while(it.hasNext())
    {
     String key=it.next();
     out.println("<input type=/"hidden/" name=/""+key+"/" value=/""+this.parameter.get(key)+"/"/>");
    }
    out.println("</from>");
    out.println("<script>window.document.submitForm.submit();</script> ");
    out.println(" </BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();

 }
}

我 在做程式的時候碰到了一個很怪的現象,在if (mysign.equals(request.getParameter("sign"))&&responseTxt.equals("true")) {}這一句,用jsp頁面的時候沒有任何問題,但寫在類的方法中就會出現mysign和sign不一致的情況,在網上也查過相關資料有的說是編碼問題,但 我打印出回撥的引數時中文資料都是對的。後來問了支付寶的工作人員,說是key和partner沒寫,可我寫的都對的。最後他們也沒給我一個合理的答案, 他們說&&用||代替好了,因為最關鍵的是下面 if("TRADE_FINISHED".equals(request.getParameter("trade_status"))){}這裡的判 斷。
所以最後我就改成了if (mysign.equals(request.getParameter("sign"))||responseTxt.equals("true")) {},如果有誰也碰到我一樣的情況,請在此留言,告知我一下答案。謝謝!!!
 

相關推薦

JAVA呼叫支付介面

JAVA呼叫支付寶的直充介面原理和銀聯介面一樣,當商家和支付寶簽好協議後就可以問支付寶的人要相關的程式碼了。我本地用的是支付寶UTF-8編碼的程式碼,先把util裡的東西達成一個alipay.jar檔案。然後編寫我們自己的呼叫和響應程式碼:1.封裝支付寶需要的介面資料@Des

Java呼叫支付支付介面 詳細教程

1,先去支付寶螞蟻金服官網申請電腦網站支付簽約。 網址:https://b.alipay.com/signing/authorizedProductSet.htm?navKey=all#/ 2,去官網下載java開發的demo 環境:Eclipse+JDK1.6及以上+Tomcat6.0

Java呼叫支付支付介面

一、場景:公司需要在網站上進行支付寶支付。二、API:使用支付寶開放平臺的支付能力-即時到賬介面。支付寶開放平臺連結三、分析:1、支付寶的文件比較容易看,主要是有相應的DEMO,我這裡看的DEMO是 JAVA-UTF-8版本。2、匯入DEMO,在com.alipay.conf

呼叫支付第三方支付介面詳解(沙箱環境)

首發地址:Java知音 注:這裡的支付是沙箱模擬支付 註冊螞蟻金服開放平臺 螞蟻金服開放平臺註冊地址 支付寶掃碼登陸 -> 註冊為自主研發者 2. 配置你的沙箱支付寶 支付寶提供一鍵生成工具便於開發者生成一對RSA2金鑰:https:

Python3.6+Django1.11.3安裝支付SDK呼叫支付線上支付介面

準備工作 首先需要註冊成為螞蟻金服的開發者     https://openhome.alipay.com/platform/manageHome.htm 接著就是下載支付寶的祕鑰生成工具。 RSA簽名驗籤工具windows_V1.4 教程支付

Java SpringMVC 支付-即時支付介面-ping++支付

一. 前言介紹:     前幾天突然要做支付寶的支付功能,​因為以前一直沒有做過支付功能,所以比較茫然,但是後來經過不斷摸索和前輩指導,終於做了出來;後來發現,其實做支付寶的支付功能也並不難。 二.正文:   首先你要搞到商家的支付寶賬號,合作者ID  

PHP呼叫支付支付介面操作步驟

1.首先掃碼登入支付寶個人主頁點選開發平臺 2.點選開發接入,找到開發服務點選沙箱 3.進入沙箱環境 4.應用中選擇電腦網站支付,然後選擇demo下載 5.下載完畢解壓後將檔案複製到WWW目錄下,新建站點,進行訪問 6.回到沙箱應用,開始配置檔案

後端---史上最全最小白最簡單最細緻的Java接入支付支付介面方法

昨天Boss在講專案的業務需求的時候對我突然說讓我做一下支付寶微信支付介面這塊功能,我的心裡是充滿問號的????,但是我的嘴卻堅定的說出了沒問題!!!                     &n

node 網站呼叫支付介面探索過程

node 網站呼叫支付寶支付 全程記錄。 該遇到的坑,我覺得都遇到了,整個過程不算太順,也沒花多少時間。 1.找介面 2.簽名 使用工具生成公鑰和私鑰,公鑰上傳到螞蟻金服的網站上。 let signer = crypto.cre

python呼叫支付支付介面

python呼叫支付寶支付介面詳細示例—附帶Django demo程式碼   專案演示: 一、輸入金額 二、跳轉到支付寶付款   三、支付成功  四、跳轉回自己網站 在使用支付寶介面的前期準備: 1、支付寶公鑰 2、應用公鑰

23、【支付模組開發】——Java對接支付步驟(沙箱環境)

####1、下載匯入專案 https://docs.open.alipay.com/54/104506 開啟支付寶介面官網: 我們下載Java版Demo 下載之後解壓,然後我們用IDEA匯入這個Demo專案~ 然後,我們下載一個我們後面需要生成生成RSA金鑰的工具:https://d

呼叫支付進行網頁掃碼支付

在編碼之前的一些工作我就不寫了,可以點下面的連線去看一下。很全的。 https://blog.csdn.net/qq_27690839/article/details/79609717 這是電腦網站支付的開發者平臺網址,講解很細,同時也不難! https://docs.open.alipay

HBuilder基礎上APP呼叫支付、微信支付(PHP)

支付寶後端程式碼: /** * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * 訂單頁面支付(支付寶支付) *

JAVA實現支付提現到個人賬戶

前言:需求是使用者將平臺上的餘額提現到支付寶 一、申請開發者賬號APPID、商戶私鑰、支付寶公鑰-開發者平臺:https://docs.open.alipay.com-注意:商戶私鑰支付寶平臺下載工具自動生成 二、引入SDK工具包:com.alipay.sdk:alipay-sdk-java:3.4.49

java呼叫騰訊雲簡訊介面,獲取驗證碼例子

1.下載騰訊雲簡訊原始碼; 2.解壓之後放專案中:如下圖 3.簡訊驗證碼獲取:     private final static int APP_ID = 騰訊雲給你分發的appid;     private final static String APP_K

java版+支付支付和微信支付(一)

最近公司在做支付模組,在接入過程中遇到了很多坑,費了不少事,現在分享一下接入方法,也記錄一下,以後可能還用的到。用的是支付寶的即時到帳支付功能和微信的掃碼支付功能,相比起來,個人感覺支付寶的文件和接入方式都比微信的容易理解和操作,也不用自己寫頁面,接入起來比較方便,畢竟是支付

Java支付支付(電腦網站支付)案例實戰

摘要:最近的一個專案中涉及到了支付業務,其中用到了微信支付和支付寶支付,在做的過程中也遇到些問題,正好馬上放假了,公司不忙了,所以現在總結梳理一下,分享給有需要的人,也為自己以後回顧留個思路。 一:支付寶支付接入準備工作: 首先,支付寶支付和微信支付意願,都是隻支援企業使

## java實現支付掃碼支付Demo原始碼

java實現支付寶掃碼支付Demo原始碼 掃碼效果圖 做這個非常非常的困難,經歷了很多很多坑後才能做出來,在這裡貼一下相關的程式碼希望能幫助做支付開發的同事們,有不懂的問題可以諮詢我QQ76949433,提供技術解答 專案結構截圖: package com.

安科瑞水電一體化遠端預付費雲平臺,支援微信支付線上值-安科瑞 華梅超

Acrelcloud-3200遠端預付費系統雲平臺體驗網址:yun.acrel-eem.com     登入名:acrel     密碼:123456簡介   《安科瑞遠端預付費管理系統 》是安科瑞公司的與DDSY-1352單相電子式預付費電能表及DT

呼叫支付SDK問題

最近做了一個專案裡面要有支付,銀聯,支付寶,微信支付 我先一個一個寫吧 先說支付寶SDK 支付寶SDK放進工程裡面之後肯定會報錯,這時候你就要一個一個改掉 1. 2. 3. 哎 我懶得寫了,貼幾張圖,改這些地方就行了