摘要:統一下單方法注商戶中心支付路徑設置所有調起微信支付的頁面都要在此注冊,否則微信支付會一閃而過。至此微信支付完成。
作者碼云地址:點我
// 授權登錄用到com.github.binarywang weixin-java-mp 3.1.0
// 微信支付用到com.github.binarywang weixin-java-pay 3.1.0
授權登錄官方 api:點我
個人理解的授權登錄流程:引導用戶點擊喚起授權登錄的地址,打開頁面后攜帶微信返回的code參數;使用code參數獲取AccessToken;獲取用戶數據。
引導客戶打開授權登錄地址后,攜帶code跳轉到指定頁面在指定頁面調用方法:
public Result getAccessToken(@RequestParam(name = "code") String code, HttpServletRequest request, HttpServletResponse response) { if (StringUtils.isBlank(code)) { return Result.error("code不存在"); } try { WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code); String accessToken = wxMpOAuth2AccessToken.getAccessToken(); // 獲取用戶微信賬戶信息 WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxMpOAuth2AccessToken.getOpenId()); if (StringUtils.isBlank(wxMpUser.getOpenId())) { return Result.error("用戶數據不存在"); } return Result.success(wxMpUser); } catch (WxErrorException e) { e.printStackTrace(); log.info("授權異常:{}", e); return Result.error("授權登錄失敗"); } catch (Exception e) { e.printStackTrace(); return Result.error("登錄失敗"); } }
前端保存下用戶信息就完事了。
個人理解的微信支付流程:用戶頁面點擊<微信支付>按鈕 后端調用 <微信統一下單> 統一下單返回參數 ,前端使用 <統一下單>返回的參數喚起微信支付。
商戶中需要在api安全中設置很多東西... 就不一一贅述了
微信支付官方api 前端:點我
后端api點我
商戶登錄地址 點我
public Result pay(Long orderNo, HttpServletRequest request) { //查詢訂單信息 Order order = orderService.findByOrderNo(orderNo); try { WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest(); //獲取當前用戶 UserInfo userInfo = RequestContextHolderUtil.getUserInfo(); orderRequest.setBody("支付內容的說明"); //商戶號 orderRequest.setMchId(mchId); orderRequest.setAttach("xxx公司"); orderRequest.setOutTradeNo(orderNo.toString()); orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(order.getPayment().toString()));//元轉成分 orderRequest.setOpenid(userInfo.getOpenId()); orderRequest.setSpbillCreateIp(HttpUtils.getIp(request)); //我這里是微信公眾號內打開的h5頁面 type使用 JSAPI 根據業務場景變更 orderRequest.setTradeType(WxPayConstants.TradeType.JSAPI); // 支付成功后跳轉頁面 這里需要對url進行編碼 orderRequest.setNotifyUrl("http://xxxxxxxxx"); orderRequest.setAppid(appId); // 調用sdk提供的統一下單方法 createOrder會返回重新組裝后的對象 建議使用這個 Object unOrder = wxService.createOrder(orderRequest); // 這個可能是偏向原生一點的統一下單,返回的參數有很多沒用的 或者null值 建議使用 createOrder下單 // wxService.unifiedOrder(orderRequest); return Result.success(unOrder); } catch (Exception e) { log.error("微信支付失敗!訂單號:{},原因:{}", orderNo, e.getMessage()); e.printStackTrace(); return Result.error("支付失敗,請稍后重試!"); } }
前端js代碼:
前端喚起微信支付的時候可能會出一些問題,這里建議使用 console.log(res.err_desc);輸出錯誤信息
res.err_msg 只會提示支付失敗... desc會提示一些具體信息
function onBridgeReady(){ WeixinJSBridge.invoke( "getBrandWCPayRequest", { "appId":"wx31fd1e1bad23db37", //公眾號名稱,由商戶傳入 "timeStamp":wxData.timeStamp, //時間戳,自1970年以來的秒數 "nonceStr":wxData.nonceStr, //隨機串 "package":wxData.packageValue, "signType":wxData.signType, //微信簽名方式: "paySign":wxData.paySign //微信簽名 }, function(res){ console.log(res.err_desc) if(res.err_msg == "get_brand_wcpay_request:ok" ){ // 使用以上方式判斷前端返回,微信團隊鄭重提示: //res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對可靠。 } }); } var wxData={}; function pay(orderId){ $.ajax({ url:"統一下單方法url", type:"get", data:{orderNo:orderId}, beforeSend: function (xhr) { xhr.setRequestHeader("token", $.cookie("token")); }, crossDomain: true, success:function(result){ wxData=result.data; 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(); } } }); }
注:商戶中心支付路徑設置 所有調起微信支付的頁面都要在此注冊,否則微信支付會一閃而過。
微信開發工具上可以模擬授權登錄,但是無法模擬微信支付,所以微信支付在微信開發工具上出現的錯誤都不用管,直接拿到真機上去測試!
使用了sdk后的支付和授權還是很方便的,麻煩的是微信方面的一些配置和流程... 很坑。
感謝sdk作者。
至此微信支付完成。
記錄下代碼方便下次使用。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76993.html
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過手機完成快速的支付流程。目前微信支付支持手機系統有蘋果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 淺析微信支...
摘要:設計模式可以通過提供經過驗證的經過驗證的開發范例來加速開發過程。將流程作為突破點,并在多個領域工作,包括流量控制,并發,斷路和負載保護,以保護服務穩定性。 1. JCSprout(Java核心知識庫) Github地址: https://github.com/crossoverJie/JCSprout star: 12k 介紹: 處于萌芽階段的 Java 核心知識庫。 2....
摘要:淺析微信支付微信公眾號網頁授權本文是淺析微信支付系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。淺析微信支付系列已經更新三篇了喲,沒有看過的朋友們可以看一下哦。 淺析微信支付:微信公眾號網頁授權 本文是【淺析微信支付】系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。 淺析微信支付系列已經更新三篇了喲~,沒有看過的朋友們可以看一下哦。 淺...
摘要:本文是淺析微信支付系列文章的第十五篇,主要講解如何開通免充值產品功能流程和其中的注意事項,對于接口升級會重要講解,避免爬坑。 本文是【淺析微信支付】系列文章的第十五篇,主要講解如何開通免充值產品功能流程和其中的注意事項,對于接口升級會重要講解,避免爬坑。 淺析微信支付系列已經更新十五篇了喲~,沒有看過的朋友們可以看一下哦。 淺析微信支付:商戶平臺代金券或立減優惠開通、指定用戶代金券發...
摘要:微信說明文檔分享的坑根據的文檔,很多人都是在初始化的配置的時候,傳入的當前的地址不正確。同樣的,給微信初始化的加入對應的參數。 date: 2018-12-13 15:23:09 用于記錄接入微信JS-SDK的坑,以后方便查詢第一次接入公眾號微信支付、分享、定位等等的坑的時候,心里是迷茫而又恐懼。因為,聽說坑特別多,后來發現自己的親身體驗到了這一點。 支付的坑 1、當前URL未注冊 ...
閱讀 1899·2021-11-24 09:39
閱讀 2555·2021-10-14 09:43
閱讀 3326·2021-10-08 10:10
閱讀 2278·2021-09-22 15:54
閱讀 2345·2019-08-29 17:20
閱讀 1581·2019-08-28 18:14
閱讀 2383·2019-08-26 13:28
閱讀 1121·2019-08-26 12:16