国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

使用 weixin-java-tools 完成微信授權(quán)登錄、微信支付

Martin91 / 1128人閱讀

摘要:統(tǒng)一下單方法注商戶(hù)中心支付路徑設(shè)置所有調(diào)起微信支付的頁(yè)面都要在此注冊(cè),否則微信支付會(huì)一閃而過(guò)。至此微信支付完成。

作者碼云地址:點(diǎn)我

        // 授權(quán)登錄用到
        
            com.github.binarywang
            weixin-java-mp
            3.1.0
        
        // 微信支付用到
        
            com.github.binarywang
            weixin-java-pay
            3.1.0
        

授權(quán)登錄官方 api:點(diǎn)我

個(gè)人理解的授權(quán)登錄流程:引導(dǎo)用戶(hù)點(diǎn)擊喚起授權(quán)登錄的地址,打開(kāi)頁(yè)面后攜帶微信返回的code參數(shù);使用code參數(shù)獲取AccessToken;獲取用戶(hù)數(shù)據(jù)。
引導(dǎo)客戶(hù)打開(kāi)授權(quán)登錄地址后,攜帶code跳轉(zhuǎn)到指定頁(yè)面在指定頁(yè)面調(diào)用方法:

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();
            // 獲取用戶(hù)微信賬戶(hù)信息
            WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxMpOAuth2AccessToken.getOpenId());
            if (StringUtils.isBlank(wxMpUser.getOpenId())) {
                return Result.error("用戶(hù)數(shù)據(jù)不存在");
            }
            return Result.success(wxMpUser);
        } catch (WxErrorException e) {
            e.printStackTrace();
            log.info("授權(quán)異常:{}", e);
            return Result.error("授權(quán)登錄失敗");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("登錄失敗");
        }
    }

前端保存下用戶(hù)信息就完事了。

個(gè)人理解的微信支付流程:用戶(hù)頁(yè)面點(diǎn)擊<微信支付>按鈕 后端調(diào)用 <微信統(tǒng)一下單> 統(tǒng)一下單返回參數(shù) ,前端使用 <統(tǒng)一下單>返回的參數(shù)喚起微信支付。
商戶(hù)中需要在api安全中設(shè)置很多東西... 就不一一贅述了
微信支付官方api 前端:點(diǎn)我
后端api點(diǎn)我
商戶(hù)登錄地址 點(diǎn)我

public Result pay(Long orderNo, HttpServletRequest request) {
        
        //查詢(xún)訂單信息
        Order order = orderService.findByOrderNo(orderNo);

        try {
            WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
            //獲取當(dāng)前用戶(hù)
            UserInfo userInfo = RequestContextHolderUtil.getUserInfo();
            orderRequest.setBody("支付內(nèi)容的說(shuō)明");
            //商戶(hù)號(hào)
            orderRequest.setMchId(mchId);
            orderRequest.setAttach("xxx公司");
            orderRequest.setOutTradeNo(orderNo.toString());
            orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(order.getPayment().toString()));//元轉(zhuǎn)成分
            orderRequest.setOpenid(userInfo.getOpenId());
            orderRequest.setSpbillCreateIp(HttpUtils.getIp(request));
            //我這里是微信公眾號(hào)內(nèi)打開(kāi)的h5頁(yè)面 type使用 JSAPI  根據(jù)業(yè)務(wù)場(chǎng)景變更
            orderRequest.setTradeType(WxPayConstants.TradeType.JSAPI);

            // 支付成功后跳轉(zhuǎn)頁(yè)面   這里需要對(duì)url進(jìn)行編碼
            orderRequest.setNotifyUrl("http://xxxxxxxxx");
            orderRequest.setAppid(appId);
            
            // 調(diào)用sdk提供的統(tǒng)一下單方法  createOrder會(huì)返回重新組裝后的對(duì)象  建議使用這個(gè) 
            Object unOrder = wxService.createOrder(orderRequest);
            // 這個(gè)可能是偏向原生一點(diǎn)的統(tǒng)一下單,返回的參數(shù)有很多沒(méi)用的 或者null值  建議使用 createOrder下單
            // wxService.unifiedOrder(orderRequest); 
            
            return Result.success(unOrder);
        } catch (Exception e) {
            log.error("微信支付失??!訂單號(hào):{},原因:{}", orderNo, e.getMessage());
            e.printStackTrace();
            return Result.error("支付失敗,請(qǐng)稍后重試!");
        }
    }

前端js代碼:
前端喚起微信支付的時(shí)候可能會(huì)出一些問(wèn)題,這里建議使用 console.log(res.err_desc);輸出錯(cuò)誤信息
res.err_msg 只會(huì)提示支付失敗... desc會(huì)提示一些具體信息

function onBridgeReady(){
    WeixinJSBridge.invoke(
        "getBrandWCPayRequest", {
            "appId":"wx31fd1e1bad23db37",     //公眾號(hào)名稱(chēng),由商戶(hù)傳入
            "timeStamp":wxData.timeStamp,         //時(shí)間戳,自1970年以來(lái)的秒數(shù)
            "nonceStr":wxData.nonceStr, //隨機(jī)串
            "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" ){
                // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:
                //res.err_msg將在用戶(hù)支付成功后返回ok,但并不保證它絕對(duì)可靠。
            }
        });
}
var wxData={};
function pay(orderId){
    $.ajax({
        url:"統(tǒng)一下單方法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();
            }
        }
    });
}

注:商戶(hù)中心支付路徑設(shè)置 所有調(diào)起微信支付的頁(yè)面都要在此注冊(cè),否則微信支付會(huì)一閃而過(guò)。
微信開(kāi)發(fā)工具上可以模擬授權(quán)登錄,但是無(wú)法模擬微信支付,所以微信支付在微信開(kāi)發(fā)工具上出現(xiàn)的錯(cuò)誤都不用管,直接拿到真機(jī)上去測(cè)試!

使用了sdk后的支付和授權(quán)還是很方便的,麻煩的是微信方面的一些配置和流程... 很坑。
感謝sdk作者。
至此微信支付完成。
記錄下代碼方便下次使用。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76993.html

相關(guān)文章

  • 淺析微信支付微信支付簡(jiǎn)單介紹(小程序、公眾號(hào)、App、H5)

    摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶(hù)接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶(hù)端的支付功能,用戶(hù)可以通過(guò)手機(jī)完成快速的支付流程。目前微信支付支持手機(jī)系統(tǒng)有蘋(píng)果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶(hù)接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒(méi)有看過(guò)的朋友們可以看一下。 淺析微信支...

    shadowbook 評(píng)論0 收藏0
  • 推薦10個(gè)Java方向最熱門(mén)的開(kāi)源項(xiàng)目(8月)

    摘要:設(shè)計(jì)模式可以通過(guò)提供經(jīng)過(guò)驗(yàn)證的經(jīng)過(guò)驗(yàn)證的開(kāi)發(fā)范例來(lái)加速開(kāi)發(fā)過(guò)程。將流程作為突破點(diǎn),并在多個(gè)領(lǐng)域工作,包括流量控制,并發(fā),斷路和負(fù)載保護(hù),以保護(hù)服務(wù)穩(wěn)定性。 1. JCSprout(Java核心知識(shí)庫(kù)) Github地址: https://github.com/crossoverJie/JCSprout star: 12k 介紹: 處于萌芽階段的 Java 核心知識(shí)庫(kù)。 2....

    wushuiyong 評(píng)論0 收藏0
  • 淺析微信支付微信公眾號(hào)網(wǎng)頁(yè)授權(quán)

    摘要:淺析微信支付微信公眾號(hào)網(wǎng)頁(yè)授權(quán)本文是淺析微信支付系列文章的第四篇,主要講解微信支付前如何獲取獲取網(wǎng)頁(yè)授權(quán)及用戶(hù)信息獲取。淺析微信支付系列已經(jīng)更新三篇了喲,沒(méi)有看過(guò)的朋友們可以看一下哦。 淺析微信支付:微信公眾號(hào)網(wǎng)頁(yè)授權(quán) 本文是【淺析微信支付】系列文章的第四篇,主要講解微信支付前如何獲取獲取網(wǎng)頁(yè)授權(quán)及用戶(hù)信息獲取。 淺析微信支付系列已經(jīng)更新三篇了喲~,沒(méi)有看過(guò)的朋友們可以看一下哦。 淺...

    tinyq 評(píng)論0 收藏0
  • 淺析微信支付:開(kāi)通免充值產(chǎn)品功能及如何進(jìn)行接口升級(jí)指引

    摘要:本文是淺析微信支付系列文章的第十五篇,主要講解如何開(kāi)通免充值產(chǎn)品功能流程和其中的注意事項(xiàng),對(duì)于接口升級(jí)會(huì)重要講解,避免爬坑。 本文是【淺析微信支付】系列文章的第十五篇,主要講解如何開(kāi)通免充值產(chǎn)品功能流程和其中的注意事項(xiàng),對(duì)于接口升級(jí)會(huì)重要講解,避免爬坑。 淺析微信支付系列已經(jīng)更新十五篇了喲~,沒(méi)有看過(guò)的朋友們可以看一下哦。 淺析微信支付:商戶(hù)平臺(tái)代金券或立減優(yōu)惠開(kāi)通、指定用戶(hù)代金券發(fā)...

    NicolasHe 評(píng)論0 收藏0
  • vue項(xiàng)目接入微信JSSDK的坑

    摘要:微信說(shuō)明文檔分享的坑根據(jù)的文檔,很多人都是在初始化的配置的時(shí)候,傳入的當(dāng)前的地址不正確。同樣的,給微信初始化的加入對(duì)應(yīng)的參數(shù)。 date: 2018-12-13 15:23:09 用于記錄接入微信JS-SDK的坑,以后方便查詢(xún)第一次接入公眾號(hào)微信支付、分享、定位等等的坑的時(shí)候,心里是迷茫而又恐懼。因?yàn)椋?tīng)說(shuō)坑特別多,后來(lái)發(fā)現(xiàn)自己的親身體驗(yàn)到了這一點(diǎn)。 支付的坑 1、當(dāng)前URL未注冊(cè) ...

    lieeps 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<