導航:首頁 > 編程語言 > 微信jsapi支付java

微信jsapi支付java

發布時間:2022-08-02 12:24:07

⑴ 微信移動支付時用官方給的例子嗎

微信支付jsapi(java版),具體代碼如下:

代碼太多,更多代碼請訪問http://www.vxzsk.com/394.html
1.項目使用springmvcrestful風格的,需要用到jar包請自行下載
2.整個項目只需要修改com.tenpay.configure.WxPayConfig中的配置信息就行。

//appid
publicstaticStringAPP_ID="公眾id";
//JSAPI介面中獲取openid,審核後在公眾平台開啟開發模式後可查看
publicstaticStringAPP_SECRET="公眾號中的秘鑰";
//受理商ID,身份標識
publicstaticStringMCH_ID="商戶id";
//商戶支付密鑰Key,裝完整數後,配置得到。32位長度
publicstaticStringKEY="商戶平台中配置證書,設置的秘鑰";
//非同步回調地址
publicstaticStringNOTIFY_URL="支付成功後的回調action";
publicstaticStringCHARTSET="UTF-8";
//加密方式
publicstaticStringSIGN_TYPE="MD5";
//redirect_uri,微信授權重定向地址
publicstaticStringREDIRECT_URI;

static{
try{
REDIRECT_URI=URLEncoder.encode("微信授權成功後重定向的action",CHARTSET);
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}

3.項目核心類com.tenpay.action.WxPayAction
pay函數:支付前准備函數,從資料庫獲取訂單號,查詢訂單金額,訂單描述、openid、prepay_id等等。
notify函數:支付成功後非同步回調函數。

一、新建基於springMVC框架的javaweb項目名字為wxPay

packagecom.tenpay.action;

importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.UnsupportedEncodingException;
importjava.util.Map;
importjava.util.SortedMap;
importjava.util.TreeMap;

importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importorg.jdom2.JDOMException;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;

importcom.tenpay.RequestHandler;
importcom.tenpay.configure.WxPayConfig;
importcom.tenpay.service.ServiceUtil;
importcom.tenpay.util.MD5Util;
importcom.tenpay.util.Sha1Util;
importcom.tenpay.util.XMLUtil;

importnet.sf.json.JSONObject;

/*******************************************************************************
*<b>類名:WxPayAction.java</b><br/>
*功能:微信支付,調用jsapi<br/>
*日期:<br/>
*
*@authorV型知識庫www.vxzsk.com
*@version1.0
*
******************************************************************************/
@Controller
@RequestMapping("/v_3")
publicclassWxPayAction{

/**
*微信客戶端授權成功後根據redirect_uri參數調整到pay介面,去准備支付前信息介面
*@paramrequest
*@paramresponse
*@return
*@throwsException
*/
@RequestMapping("pay")
publicStringorder(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
/**
*第一步:用戶同意授權,根據參數,獲取code
*授權成功後返回的授權碼,參考:http://mp.weixin.qq.com/wiki/17/.html#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code
*/
Stringcode=request.getParameter("code");
Stringstate=request.getParameter("state");

//state可以為任何含義,根據你前端需求,這里暫時叫商品id
//授權碼、商品id
System.out.println("code="+code+",state="+state);

/**
*第二步:通過code換取網頁授權access_token
*根據授權碼code獲取access_token,參考:http://mp.weixin.qq.com/wiki/17/.html#.E7.AC.AC.E4.BA.8C.E6.AD.A5.EF.BC.9A.E9.80.9A.E8.BF.87code.E6.8D.A2.E5.8F.96.E7.BD.91.E9.A1.B5.E6.8E.88.E6.9D.83access_token
*/
//下面就到了獲取openid,這個代表用戶id.
//獲取openID
Stringopenid=ServiceUtil.getOpenId(code);
//生成隨機字元串
Stringnoncestr=Sha1Util.getNonceStr();
//生成1970年到現在的秒數.
Stringtimestamp=Sha1Util.getTimeStamp();
//訂單號,自定義生成規則,只要全局唯一就OK
Stringout_trade_no="NO"+System.currentTimeMillis()+"0001";
//訂單金額,應該是根據state(商品id)從資料庫中查詢出來
Stringorder_price=String.valueOf(1);
//商品描述,應該是根據state(商品id)從資料庫中查詢出來
Stringbody="商品描述,測試....";

/**
*第三步:統一下單介面
*需要第二步生成的openid,參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
*/
RequestHandlerreqHandler=newRequestHandler(request,response);
//初始化RequestHandler類可以在微信的文檔中找到.還有相關工具類
reqHandler.init();
//執行統一下單介面獲得預支付id,一下是必填參數

//微信分配的公眾賬號ID(企業號corpid即為此appId)
reqHandler.setParameter("appid",WxPayConfig.APP_ID);
//微信支付分配的商戶號
reqHandler.setParameter("mch_id",WxPayConfig.MCH_ID);
//終端設備號(門店號或收銀設備ID),注意:PC網頁或公眾號內支付請傳"WEB"
reqHandler.setParameter("device_info","WEB");
//隨機字元串,不長於32位。推薦隨機數生成演算法
reqHandler.setParameter("nonce_str",noncestr);
//商品描述
reqHandler.setParameter("body",body);
//商家訂單號
reqHandler.setParameter("out_trade_no",out_trade_no);
//商品金額,以分為單位
reqHandler.setParameter("total_fee",order_price);
//APP和網頁支付提交用戶端ip,Native支付填調用微信支付API的機器IP。
reqHandler.setParameter("spbill_create_ip","123.57.58.123");
//下面的notify_url是用戶支付成功後為微信調用的action非同步回調.
reqHandler.setParameter("notify_url",WxPayConfig.NOTIFY_URL);
//交易類型,取值如下:JSAPI,NATIVE,APP,詳細說明見參數規定
reqHandler.setParameter("trade_type","JSAPI");
//------------需要進行用戶授權獲取用戶openid-------------
reqHandler.setParameter("openid",openid);//這個必填.
/*
*<xml><appid>wx2421b1c4370ec43b</appid><attach>支付測試</attach><body>
*JSAPI支付測試</body><mch_id>10000100</mch_id><nonce_str>
*</nonce_str><notify_url>http://wxpay.
*weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url><openid>
*oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid><out_trade_no>1415659990</
*out_trade_no><spbill_create_ip>14.23.150.211</spbill_create_ip><
*total_fee>1</total_fee><trade_type>JSAPI</trade_type><sign>
*</sign></xml>
*/
//生成簽名,並且轉為xml
StringrequestXml=reqHandler.getRequestXml();
System.out.println("requestXml:"+requestXml);

//得到的預支付id
Stringprepay_id=ServiceUtil.unifiedorder(requestXml);
SortedMap<String,String>params=newTreeMap<String,String>();
params.put("appId",WxPayConfig.APP_ID);
params.put("timeStamp",timestamp);
params.put("nonceStr",noncestr);
params.put("package","prepay_id="+prepay_id);
params.put("signType","MD5");

System.out.println("params:"+JSONObject.fromObject(params).toString());

//生成支付簽名,這個簽名給微信支付的調用使用
SortedMap<Object,Object>signMap=newTreeMap<Object,Object>();
signMap.put("appId",WxPayConfig.APP_ID);
signMap.put("timeStamp",timestamp);
signMap.put("nonceStr",noncestr);
signMap.put("package","prepay_id="+prepay_id);
signMap.put("signType","MD5");

//微信支付簽名
StringpaySign=MD5Util.createSign(signMap,WxPayConfig.KEY);
System.out.println("PaySIGN:"+paySign);

//微信分配的公眾賬號ID(企業號corpid即為此appId)
request.setAttribute("appId",WxPayConfig.APP_ID);
//時間戳
request.setAttribute("timeStamp",timestamp);
//隨機字元串
request.setAttribute("nonceStr",noncestr);
//預支付id,就這樣的格式
request.setAttribute("package","prepay_id="+prepay_id);
//加密格式
request.setAttribute("signType",WxPayConfig.SIGN_TYPE);
//微信支付簽名
request.setAttribute("paySign",paySign);
return"pay";
}

/**
*非同步返回
*/
@RequestMapping("notify")
publicStringnotify(HttpServletRequestrequest,HttpServletResponseresponse){
try{

InputStreaminStream=request.getInputStream();
ByteArrayOutputStreamoutSteam=newByteArrayOutputStream();
byte[]buffer=newbyte[1024];
intlen=0;
while((len=inStream.read(buffer))!=-1){
outSteam.write(buffer,0,len);
}
outSteam.close();
inStream.close();
StringresultStr=newString(outSteam.toByteArray(),WxPayConfig.CHARTSET);
Map<String,String>resultMap=XMLUtil.doXMLParse(resultStr);

System.out.println("微信回調結果:"+resultMap.toString());

Stringresult_code=resultMap.get("result_code");
Stringis_subscribe=resultMap.get("is_subscribe");
Stringout_trade_no=resultMap.get("out_trade_no");
Stringtransaction_id=resultMap.get("transaction_id");
Stringsign=resultMap.get("sign");
Stringtime_end=resultMap.get("time_end");
Stringbank_type=resultMap.get("bank_type");
Stringreturn_code=resultMap.get("return_code");
//簽名驗證
//GenericValueuserLogin=delegator.findOne("UserLogin",UtilMisc.toMap("userLoginId","admin"),false);
if(return_code.equals("SUCCESS")){
//此處就是你的邏輯代碼
//修改資料庫支付狀態
}
request.setAttribute("out_trade_no",out_trade_no);
//通知微信.非同步確認成功.必寫.不然會一直通知後台.八次之後就認為交易失敗了.
response.getWriter().write(RequestHandler.setXML("SUCCESS",""));
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(JDOMExceptione){
e.printStackTrace();
}
return"notify";
}
}

⑵ java實現微信支付,通過JSAPI發起支付請求

在config.jsp填 好 在ResponseHandler填下APPKEY 用wxm-pay-api-demo.html或者jsapi.jsp我測試是都可以用.試能用哪個用哪個吧 JS已經搞好了

ResponseHandler,ResponseHandler,payNotifyUrl.jsp都修了..

⑶ jsapi支付什麼意思

JSAPI支付是指用戶在微信中打開商戶的H5頁面,商戶在H5頁面通過調用微信支付提供的JSAPI介面調起微信支付模塊來完成支付。
應答時間:2020-09-30,最新業務變化請以平安銀行官網公布為准。

[平安銀行我知道]想知道更多?快來看「平安銀行我知道」吧~

https://b.pingan.com.cn/paim/iknow/index.html

⑷ 用Java怎麼實現微信支付

具體方法步驟:

一、准備階段:已認證微信號,且通過微信支付認證,這個可以看微信文檔,很詳細,這里就不再重復。

⑸ 微信企業號開通jsapi 支付問題

1、在微信中或許您找不到微信支付的通道,沒有任何可綁定銀行卡的入口。其實,當您第一次進行支付時會提供給您綁定銀行卡的入口,綁定後,就可以在其他公眾帳號中完成微信支付。

2、現在我們來完成首次支付操作以綁定銀行卡。在微信主界面切換到「我」界面,然後點擊列表項中的「表情商店」選項,如圖所示。

3、在新界面中選擇一套表情進行購買操作,如「飯團和他的朋友們」,點擊右邊的價格按鈕購買此套表情(不是真的購買,只是為了演示給大家如何綁定銀行卡)。

4、點擊「付款」按鈕開始使用微信支付,支付時需要綁定銀行卡。請輸入持卡人銀行卡號碼,然後點擊「下一步」按鈕。

5、輸入銀行卡類型、銀行預留持卡人姓名、身份證、手機號等個人信息。

⑹ 微信h5支付和jsapi支付的區別

1、含義不同。

微信h5支付:是集成在微信客戶端的支付功能,用戶可以通過手機完成快速的支付流程。

jsapi支付:以綁定銀行卡的快捷支付為基礎的支付。

2、支付方式不同。

微信h5支付:h5支付是用在公眾號內。

jsapi支付:jsapi支付是網頁發起的微信支付請求。

3、功能不同。

微信h5支付:可以在手機網站內直接支付,為移動支付方式,簡單快捷。

jsapi支付:僅可以在微信瀏覽器內發起支付,比如公眾號內的網頁和微信小程序,略微麻煩。

⑺ java微信支付JSAPI簽名報空指針null是怎麼回事

你好,先按照異常信息找到是哪行拋出的異常。
能拋出空指針異常說明這一行上有對象是null但是去調用方法了。
按照這個思路檢查一下吧。
如果有幫助到你,請點擊採納。

⑻ 用Java怎麼實現微信支付

具體方法步驟:

一、准備階段:已認證微信號,且通過微信支付認證,這個可以看微信文檔,很詳細,這里就不再重復。

⑼ 微信支付怎麼配置jsapi

微信支付,是微信向有出售物品/提供服務需求的商家提供推廣銷售、支付收款、經營分析的整套解決方案,包括多種支付方式,如付款碼支付、JSAPI支付、小程序支付、APP支付、電腦網站支付、企業微信支付、H5支付,以及多種支付工具,如微信紅包、代金券等。

微信支付配置步驟:

步驟1:注冊支付商戶號

步驟2、秘鑰(32位)

步驟3、上傳證書

步驟4、商戶號新增小程序授權(注意授權狀態是否是成功)

步驟5、公眾號支付、JSAPI開通

登錄小程序後台找到配置管理→支付配置

登錄開通微信支付商戶平台(https://pay.weixin.qq.com),在微信支付商戶平台裡面進行查找商戶號和設置API密鑰、下載證書

以下步驟查找上述基礎的內容在哪個地方查找。

步驟1、支付商戶號查找:

(註:登錄商戶號盡量使用360瀏覽器或者谷歌瀏覽器)

進入後在 賬戶中心—商戶信息、可以看到微信支付商戶號、把商戶號記一下,填到後台。

註:首次進入微信支付後台需要下載控制項和操作證書(按照提示一步步操作即可)

步驟二:API密鑰:隨後點擊下面的API安全、設置一下API秘鑰,API密鑰必須是32位字母或數字

註:該處設置秘鑰時看下設置下方的API秘鑰,不要設置APIV3的秘鑰。

註:該處設置下後把新設置的密鑰填到製作後台。

步驟三:證書路徑、密鑰路徑:API秘鑰設置好了之後、點擊下載API證書

(註:該處證書上傳用於退款。退款需要往商戶號里充值錢。)

下載後是一個壓縮包,然後解壓、然後根據名稱分別上傳到證書路徑、密鑰路徑。

步驟四:小程序在公眾號里申請,公眾號里開通的微信支付;該方式需要先登錄商戶號->產品中心->APPID授權管理->新增該小程序的授權。具體如下圖:

如提示已綁定(此步驟跳過)

授權後到微信小程序後台同意授權。如圖:

確保上圖申請單狀態是授權成功。

步驟五:查看微信支付商戶號公眾號支付、JSAPI是否開通。如下圖:(如未開通,點擊開通下,如果沒有公眾號支付可不用管)

(1)公眾號支付開通(如果沒有公眾號支付,此步驟跳過)

(2)JSAPI開通

閱讀全文

與微信jsapi支付java相關的資料

熱點內容
字母h從右往左跑的c語言編程 瀏覽:127
安卓手機如何擁有蘋果手機橫條 瀏覽:761
業余編程語言哪個好學 瀏覽:131
按照文件夾分個壓縮 瀏覽:104
航空工業出版社單片機原理及應用 瀏覽:756
如何在電信app上綁定親情號 瀏覽:376
安卓的怎麼用原相機拍月亮 瀏覽:804
配音秀為什麼顯示伺服器去配音了 瀏覽:755
c盤清理壓縮舊文件 瀏覽:325
app怎麼交付 瀏覽:343
圖蟲app怎麼才能轉到金幣 瀏覽:175
如何做徵文app 瀏覽:446
用什麼app管理斐訊 瀏覽:169
安卓如何下載寶可夢劍盾 瀏覽:166
編譯器開發屬於哪個方向 瀏覽:940
megawin單片機 瀏覽:687
以色列加密貨幣監督 瀏覽:909
程序員前端現在怎麼樣 瀏覽:499
伺服器和介面地址ping不通 瀏覽:557
linux命令返回上級目錄 瀏覽:899