java對(duì)接微信支付之JSAPI支付(微信公眾號(hào)支付)
一、JSAPI支付接入前準(zhǔn)備
1、JSAPI支付首先需要注冊(cè)、認(rèn)證一個(gè)公眾號(hào)(大概300塊一年)
2、申請(qǐng)成為商戶,商戶的類型有多種(普通商戶,服務(wù)商,特約商戶等),根據(jù)自己的需求申請(qǐng)
3、微信公眾號(hào)和商戶關(guān)聯(lián)
3.1、登錄微信公眾號(hào)關(guān)聯(lián)申請(qǐng)?zhí)柕纳虘籼?hào)
3.2、關(guān)聯(lián)商戶號(hào)
點(diǎn)擊添加,根據(jù)指引完成綁定..............
4、獲取appId、商戶號(hào)
4.1、登錄微信公眾號(hào),進(jìn)入【基本配置】目錄,取到公眾號(hào)的appId ,如圖
4.2、登錄微信支付商戶號(hào),進(jìn)入【賬戶中心->賬戶信息->微信支付商戶號(hào),取到微信支付商戶號(hào),如圖
?5、登錄微信商戶平臺(tái),進(jìn)入【賬戶中心 > API安全 】目錄,設(shè)置APIV3密鑰,有官方文檔這里就不贅述了
?二、代碼片段
1.引入Maven依賴
<dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> <version>0.2.7</version> </dependency>
2.后端業(yè)務(wù)請(qǐng)求接口
根據(jù)自己的業(yè)務(wù)需求進(jìn)行修改使用,參數(shù)根據(jù)自己的需求來(lái),代碼如下(JSAPI示例):
/** 商戶號(hào)*/ @Value("${wx.mchId}") private String mchId; /** 公眾號(hào)appid*/ @Value("${wx.appId}") private String appId; /** 商戶APIV3密鑰*/ @Value("${wx.apiV3Key}") private String apiV3Key; /**微信回調(diào)地址*/ @Value("${wx.v3PayNotifyUrl}") private String v3PayNotifyUrl; /** 商戶證書序列號(hào) */ @Value("${wx.merchantSerialNumber}") private String merchantSerialNumber; public static RSAAutoCertificateConfig config = null ; public static JsapiServiceExtension service = null ; @GetMapping("/prepay") public PrepayWithRequestPaymentResponse WeChartPay(String amountString) { String openId = "oI*******************iGiA"; // 訂單號(hào) String orderUuid = IdUtils.getUUID(); //元轉(zhuǎn)換為分 Integer amountInteger = Integer.valueOf(AmountUnitConversionUtil.changeYuanAndFen(amountString)); //私鑰文件路徑(本地自己測(cè)試看自己的私鑰文件存放路徑) String filePath ="***/***/***/apiclient_key.pem";//測(cè)試環(huán)境可放到resource目錄下 // 一個(gè)商戶號(hào)只能初始化一個(gè)配置,否則會(huì)因?yàn)橹貜?fù)的下載任務(wù)報(bào)錯(cuò) if (config == null) { config =new RSAAutoCertificateConfig.Builder() .merchantId(mchId) .privateKeyFromPath(filePath) .merchantSerialNumber(merchantSerialNumber) .apiV3Key(apiV3Key) .build(); } // 構(gòu)建service if (service == null) { service = new JsapiServiceExtension.Builder().config(config).build(); } //組裝預(yù)約支付的實(shí)體 // request.setXxx(val)設(shè)置所需參數(shù),具體參數(shù)可見Request定義 PrepayRequest request = new PrepayRequest(); //計(jì)算金額 Amount amount = new Amount(); amount.setTotal(amountInteger); amount.setCurrency("CNY"); request.setAmount(amount); //公眾號(hào)appId request.setAppid(appId); //商戶號(hào) request.setMchid(mchId); //支付者信息 Payer payer = new Payer(); payer.setOpenid(openId); request.setPayer(payer); //描述 request.setDescription("支付測(cè)試"); //微信回調(diào)地址,需要是https://開頭的,必須外網(wǎng)可以正常訪問(wèn) //本地測(cè)試可以使用內(nèi)網(wǎng)穿透工具,網(wǎng)上很多的 request.setNotifyUrl(v3PayNotifyUrl); //訂單號(hào) request.setOutTradeNo(orderUuid); // 加密 PrepayWithRequestPaymentResponse payment = service.prepayWithRequestPayment(request); //默認(rèn)加密類型為RSA payment.setSignType("MD5"); //返回?cái)?shù)據(jù),前端調(diào)起支付 return payment;
3.前端調(diào)起支付請(qǐng)求方法
function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"wx2421b1c4370ec43b", //公眾號(hào)ID,由商戶傳入 "timeStamp":"1395712654", //時(shí)間戳,自1970年以來(lái)的秒數(shù) "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //隨機(jī)串 "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信簽名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ){ // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示: //res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對(duì)可靠。 } }); } if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(); }
總結(jié)
以上就是根據(jù)官方文檔進(jìn)行實(shí)現(xiàn)的一個(gè)調(diào)起微信JSAPI支付測(cè)試,微信回調(diào)的接口就先不多說(shuō)了!
到此這篇關(guān)于java對(duì)接微信支付之JSAPI支付(微信公眾號(hào)支付)的文章就介紹到這了,更多相關(guān)java對(duì)接JSAPI支付內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven中央倉(cāng)庫(kù)發(fā)布的實(shí)現(xiàn)方法
最近做了個(gè)項(xiàng)目,希望能夠上傳到maven中央倉(cāng)庫(kù),給更多的人使用,于是就產(chǎn)生了這次項(xiàng)目發(fā)布經(jīng)歷。感興趣的可以一起來(lái)參考一下2021-06-06Spring創(chuàng)建bean對(duì)象三種方式代碼實(shí)例
這篇文章主要介紹了Spring創(chuàng)建bean對(duì)象三種方式代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07如何利用JConsole觀察分析Java程序的運(yùn)行并進(jìn)行排錯(cuò)調(diào)優(yōu)
從Java 5開始 引入了 JConsole。JConsole 是一個(gè)內(nèi)置 Java 性能分析器,可以從命令行或在 GUI shell 中運(yùn)行。您可以輕松地使用 JConsole(或者,它更高端的 “近親” VisualVM )來(lái)監(jiān)控 Java 應(yīng)用程序性能和跟蹤 Java 中的代碼2015-12-12Spring中@Autowired和@Resource注解的使用區(qū)別詳解
這篇文章主要介紹了Spring中@Autowired和@Resource注解的使用區(qū)別詳解,@Autowired默認(rèn)根據(jù)type進(jìn)行注入,找到與指定類型兼容的?Bean?并進(jìn)行注入,如果無(wú)法通過(guò)type匹配到對(duì)應(yīng)的?Bean?的話,會(huì)根據(jù)name進(jìn)行匹配,如果都匹配不到則拋出異常,需要的朋友可以參考下2023-11-11Idea連接GitLab的過(guò)程以及創(chuàng)建在gitlab中創(chuàng)建用戶和群組方式
本文介紹了如何在IDEA中連接GitLab,首先需安裝GitLab插件并配置SSH免密登錄,接著,創(chuàng)建GitLab個(gè)人令牌并在Git中配置,文章還提到了如何在GitLab中創(chuàng)建用戶、群組及設(shè)置權(quán)限,如Owner、Maintainer、Developer等,并強(qiáng)調(diào)了群組名和人員名稱的命名規(guī)范2024-11-11