国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序?qū)游⑿胖Ц对敿毥坛?/h1>

這篇具有很好參考價值的文章主要介紹了微信小程序?qū)游⑿胖Ц对敿毥坛?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

小程序 微信支付官方文檔

https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_11&index=2

https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml

前提

在進行對接微信支付之前,我們首先需要將以下幾點準備好:

  • 申請APPID
  • 申請商戶號
  • 小程序開通微信支付,綁定已經(jīng)申請好的商戶號。登錄小程序后臺(mp.weixin.qq.com)。點擊左側(cè)導(dǎo)航欄的微信支付,在頁面中進行開通。(開通申請要求小程序已發(fā)布上線)

注意事項

  • appid必須為最后拉起收銀臺的小程序appid;
  • mch_id為和appid成對綁定的支付商戶號,收款資金會進入該商戶號;
  • trade_type請?zhí)顚慗SAPI;
  • openid為appid對應(yīng)的用戶標識,即使用wx.login接口獲得的openid。

本文主要記錄后端步驟,前端步驟無非就是獲取后端數(shù)據(jù)然后調(diào)用提供的API進行支付,大家可自行查看官方文檔。

1. 整體流程

小程序支付的交互圖如下:清晰圖片可以到官網(wǎng)查看.

微信小程序?qū)游⑿胖Ц对敿毥坛? referrerpolicy=

商戶系統(tǒng)和微信支付系統(tǒng)主要交互:

1、小程序內(nèi)調(diào)用登錄接口,獲取到用戶的openid,api參見公共api【小程序登錄API】

2、商戶server調(diào)用支付統(tǒng)一下單,api參見公共api【統(tǒng)一下單API】

3、商戶server調(diào)用再次簽名,api參見公共api【再次簽名】

4、商戶server接收支付通知,api參見公共api【支付結(jié)果通知API】

5、商戶server查詢支付結(jié)果,如未收到支付通知的情況,商戶后臺系統(tǒng)可調(diào)用【查詢訂單API】 (查單實現(xiàn)可參考:支付回調(diào)和查單實現(xiàn)指引)

2. 后端項目搭建

大致了解流程之后,我們就可以進行代碼的編寫了,首先大家自行創(chuàng)建一個Spring Boot項目即可。這里就不演示了,大家自行根據(jù)自己的需求搭建即可,需要注意的是我們需要添加微信支付的sdk以及相關(guān)依賴。

 <!--微信支付請求-->
        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.13</version>
        </dependency>

        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.1.3</version>
        </dependency>

        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.10</version>
        </dependency>

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-avro</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.6</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>

        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>

3. 獲取open_id

我們在小程序端通過login方法獲取code,然后調(diào)用我們編寫的接口請求微信服務(wù)端獲取open_id。

該步驟具體可以查看 微信小程序?qū)游⑿诺卿?。

wx.login({
  success (res) {
    if (res.code) {
      //發(fā)起網(wǎng)絡(luò)請求
      wx.request({
        url: 'https://example.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登錄失??!' + res.errMsg)
    }
  }
})

4. 小程序調(diào)起支付API

小程序調(diào)起支付數(shù)據(jù)簽名字段列表:

字段名 變量名 必填 類型 示例值 描述
小程序ID appId String wxd678efh567hg6787 微信分配的小程序ID
時間戳 timeStamp String 1490840662 時間戳從1970年1月1日00:00:00至今的秒數(shù),即當前的時間
隨機串 nonceStr String 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字符串,不長于32位。推薦隨機數(shù)生成算法
數(shù)據(jù)包 package String prepay_id=wx2017033010242291fcfe0db70013231072 統(tǒng)一下單接口返回的 prepay_id 參數(shù)值,提交格式如:prepay_id=wx2017033010242291fcfe0db70013231072
簽名方式 signType String MD5 簽名類型,默認為MD5,支持HMAC-SHA256和MD5。注意此處需與統(tǒng)一下單的簽名類型一致

舉例如下:

paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6

從官方文檔給出的參數(shù)可以看出,小程序調(diào)用支付API,有一些參數(shù)需要我們從后端接口返回,所以我們來進行后端支付接口的編寫。

5. 下單及回調(diào)接口

實現(xiàn)步驟

  • 定義配置類 保存支付相關(guān)參數(shù)
  • 定義支付接口,組裝數(shù)據(jù)發(fā)起請求
  • 小程序調(diào)用支付接口

相關(guān)配置類,簽名,隨機字符串的代碼在文末給出,本文就不貼出來了。

@RestController
@RequestMapping(value = "/api/v1")
public class WXPayController {


    /**
     * 下單
     */
    @RequestMapping(
            value = "/weixin/payment",
            method = RequestMethod.POST
    )
    public Map payment() {
        Map<String, Object> map = new HashMap<>();
        String money = "10";
        String title = "商品名字";

        try {
            OrderInfo order = new OrderInfo();
            order.setAppid(Configure.getAppID());
            order.setMch_id(Configure.getMch_id());
            order.setNonce_str(RandomStringGenerator.getRandomStringByLength(32));
            order.setBody(title);
            order.setOut_trade_no(RandomStringGenerator.getRandomStringByLength(32));
            order.setTotal_fee(Integer.parseInt(money));     // 該金錢其實10 是 0.1元
            order.setSpbill_create_ip("127.0.0.1");
            order.setNotify_url(Configure.getNotify_url());
            order.setTrade_type(Configure.getTrade_type());
            //這里直接使用當前用戶的openid
            order.setOpenid("ohfYG5O2mdXZLoszDAWwqtodOZRM");
            order.setSign_type("MD5");
            //生成簽名
            String sign = Signature.getSign(order);
            order.setSign(sign);

            String result = HttpRequest.sendPost(Configure.getUrl(), order);
            System.out.println(result);
            XStream xStream = new XStream();
            xStream.alias("xml", OrderReturnInfo.class);

            OrderReturnInfo returnInfo = (OrderReturnInfo) xStream.fromXML(result);
            // 二次簽名
            if ("SUCCESS".equals(returnInfo.getReturn_code()) && returnInfo.getReturn_code().equals(returnInfo.getResult_code())) {
                SignInfo signInfo = new SignInfo();
                signInfo.setAppId(Configure.getAppID());
                long time = System.currentTimeMillis() / 1000;
                signInfo.setTimeStamp(String.valueOf(time));
                signInfo.setNonceStr(RandomStringGenerator.getRandomStringByLength(32));
                signInfo.setRepay_id("prepay_id=" + returnInfo.getPrepay_id());
                signInfo.setSignType("MD5");
                //生成簽名
                String sign1 = Signature.getSign(signInfo);
                Map<String, String> payInfo = new HashMap<>();
                payInfo.put("timeStamp", signInfo.getTimeStamp());
                payInfo.put("nonceStr", signInfo.getNonceStr());
                payInfo.put("package", signInfo.getRepay_id());
                payInfo.put("signType", signInfo.getSignType());
                payInfo.put("paySign", sign1);
                map.put("status", 200);
                map.put("msg", "統(tǒng)一下單成功!");
                map.put("data", payInfo);

                // 此處可以寫喚起支付前的業(yè)務(wù)邏輯

                // 業(yè)務(wù)邏輯結(jié)束 回傳給小程序端喚起支付
                return map;
            }
            map.put("status", 500);
            map.put("msg", "統(tǒng)一下單失敗!");
            map.put("data", null);
            return map;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 微信小程序支付成功回調(diào)函數(shù)
     */
    @RequestMapping(value = "/weixin/callback")
    public void wxNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
        String line = null;
        StringBuilder sb = new StringBuilder();
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        br.close();
        //sb為微信返回的xml
        String notityXml = sb.toString();
        String resXml = "";
        System.out.println("接收到的報文:" + notityXml);

        Map map = PayUtil.doXMLParse(notityXml);

        String returnCode = (String) map.get("return_code");
        if ("SUCCESS".equals(returnCode)) {
            //驗證簽名是否正確
            Map<String, String> validParams = PayUtil.paraFilter(map);  //回調(diào)驗簽時需要去除sign和空值參數(shù)
            String validStr = PayUtil.createLinkString(validParams);//把數(shù)組所有元素,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
            String sign = PayUtil.sign(validStr, Configure.getKey(), "utf-8").toUpperCase();//拼裝生成服務(wù)器端驗證的簽名
            // 因為微信回調(diào)會有八次之多,所以當?shù)谝淮位卣{(diào)成功了,那么我們就不再執(zhí)行邏輯了

            //根據(jù)微信官網(wǎng)的介紹,此處不僅對回調(diào)的參數(shù)進行驗簽,還需要對返回的金額與系統(tǒng)訂單的金額進行比對等
            if (sign.equals(map.get("sign"))) {
                /**此處添加自己的業(yè)務(wù)邏輯代碼start**/
                // bla bla bla....
                /**此處添加自己的業(yè)務(wù)邏輯代碼end**/
                //通知微信服務(wù)器已經(jīng)支付成功
                resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
                        + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
            } else {
                System.out.println("微信支付回調(diào)失敗!簽名不一致");
            }
        } else {
            resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
                    + "<return_msg><![CDATA[報文為空]]></return_msg>" + "</xml> ";
        }
        System.out.println(resXml);
        System.out.println("微信支付回調(diào)數(shù)據(jù)結(jié)束");

        BufferedOutputStream out = new BufferedOutputStream(
                response.getOutputStream());
        out.write(resXml.getBytes());
        out.flush();
        out.close();
    }
}

6. 項目地址

微信支付案例

具體代碼大家自行查看,相關(guān)商戶號沒有給出,大家自行申請。文章來源地址http://www.zghlxwxcb.cn/news/detail-485835.html

到了這里,關(guān)于微信小程序?qū)游⑿胖Ц对敿毥坛痰奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot對接微信小程序支付功能開發(fā)(一,下單功能)

    1,接入前準備: 接入模式選擇直連模式; 申請小程序,得到APPID,并開通微信支付; 申請微信商戶號,得到mchid,并綁定APPID; 配置商戶API key,下載并配置商戶證書,根據(jù)微信官方文檔操作:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml 上面都配置完之后會得到:小

    2024年02月10日
    瀏覽(32)
  • 校園二手書商城源代碼基于微信小程序云開發(fā),可在線支付提現(xiàn),含詳細配置教程

    校園二手書商城源代碼基于微信小程序云開發(fā),可在線支付提現(xiàn),含詳細配置教程

    校園二手書商城源代碼基于微信小程序云開發(fā),可在線支付提現(xiàn),含詳細配置教程 完整代碼下載地址:校園二手書商城源代碼基于微信小程序云開發(fā) 長話短說,下面直接說配置流程 1、下載導(dǎo)入 直接下載到本地,然后導(dǎo)入開發(fā)者工具 最近墻的厲害,也可使用藍奏云下載 ht

    2023年04月24日
    瀏覽(111)
  • Python對接微信小程序V3接口進行支付,并使用uwsgi+nginx+django進行https部署

    網(wǎng)上找了很多教程,但是很亂很雜,并且教程資源很少且說的詳細。這里就記錄一下分享給大家 共分為以下幾個步驟: 目錄 一、開始前準備信息 二、使用前端code獲取用戶的openid 三、對接小程序v3接口下單 四、小程序支付的回調(diào) 五、安裝并啟動uwsgi 六、安裝并啟動nginx 七、

    2024年02月12日
    瀏覽(28)
  • 全網(wǎng)最詳細實現(xiàn)微信小程序支付功能【前端部分】

    全網(wǎng)最詳細實現(xiàn)微信小程序支付功能【前端部分】

    用戶點擊立即購買后進入確認訂單頁面,在此頁面可選擇商品數(shù)量,是否使用優(yōu)惠券,以及一些簡單的個人信息填寫,點擊支付輸入密碼則支付成功,如果點擊支付后沒有付款關(guān)閉了頁面會跳轉(zhuǎn)到待支付頁面并開始倒計時(待支付頁面顯示該商品適用的店鋪信息及個人信息訂

    2024年02月11日
    瀏覽(33)
  • Java對接微信支付(史上最詳細)

    本文將介紹如何使用Java對接微信支付,包括獲取支付參數(shù)、支付回調(diào)處理等步驟。本文適用于已經(jīng)熟悉微信支付基本原理的讀者。 JDK 1.8 Maven Spring Boot 2.x 微信支付開發(fā)文檔 為了進行支付,我們需要先獲取微信支付的參數(shù)信息,包括appid、商戶id、支付密鑰等。 配置文件 我們

    2024年02月15日
    瀏覽(30)
  • 微信小程序JSAPI下單支付PHP前后端教程

    微信小程序JSAPI下單支付PHP前后端教程

    準備數(shù)據(jù): 微信支付API證書,微信支付商戶號,小程序appid,微信支付API證書序列號 獲取微信支付api證書教程:如何下載微信支付證書(API證書)_荒~的博客-CSDN博客_微信支付證書 獲取微信支付API證書序列號:點擊管理證書即可看到 ? 第一步:生成預(yù)支付交易單 參考文檔:

    2024年02月11日
    瀏覽(20)
  • SpringBoot對接小程序微信支付

    SpringBoot對接小程序微信支付

    目錄 前言 一、準備工作 2.1、企業(yè)微信小程序開通 2.1.1、獲取開發(fā)者ID 2.1.2、開通支付功能 2.1.3、關(guān)聯(lián)商戶號 2.2、企業(yè)商戶號的開通 2.2.1、獲取商戶號mch_id 2.2.2、獲取商戶API密鑰mch_key 二、整體流程 三、后端項目搭建 3.1、統(tǒng)一下單 3.2、支付支付回調(diào) 3.3、問題排查 3.4、統(tǒng)一下

    2024年02月04日
    瀏覽(26)
  • 保姆級微信小程序?qū)铀{牙設(shè)備教程。微信小程序發(fā)送不同藍牙指令(定時發(fā)送,斷開重連,判斷是否有藍牙權(quán)限等)

    本文是一個完整的對接設(shè)備,發(fā)送不同指令監(jiān)聽不同返回的完整示例,可根據(jù)實際項目按需更改。 注: app.showModal 為在app.js中封裝的showModal方法, then(()={}) 代表用戶點擊 confirm ,可用 wx.showModal 代替。 公用方法 請求設(shè)備列表 1. 判斷是否有藍牙權(quán)限 2. 初始化藍牙 wx.openBluet

    2024年03月20日
    瀏覽(38)
  • 微信支付-商家給小程序用戶轉(zhuǎn)賬教程(全網(wǎng)最詳細JAVA版)

    微信支付-商家給小程序用戶轉(zhuǎn)賬教程(全網(wǎng)最詳細JAVA版)

    一.首頁要開通商家轉(zhuǎn)賬到零錢功能,點產(chǎn)品設(shè)置,開啟驗密批量API,設(shè)置接口IP,這里的接口ip不是指用戶的,而是你本機的 ip或服務(wù)器的ip 二.獲取微信平臺證書,注意微信平臺證書和商戶證書是有區(qū)別的,別弄混淆了 1.根據(jù)鏈接把獲取平臺證書的代碼下載下來 https://github

    2024年02月11日
    瀏覽(25)
  • 微信小程序API(詳細 教程)

    微信小程序API(詳細 教程)

    小程序中的 API 是由宿主環(huán)境提供的,通過這些豐富的小程序 API,開發(fā)者可以方便的調(diào)用微信提供的能力,例如:獲取用戶信息、本地存儲、支付功能等。 小程序提供了很多實用的方法供開發(fā)者使用 小程序全局對象是: wx 所有的 API 都保存在 wx 對象中 顯示消息提示框: wx.sh

    2023年04月15日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包