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

自己個人擁有一個可以支付功能的網(wǎng)站?當然可以了!保姆級演示!

這篇具有很好參考價值的文章主要介紹了自己個人擁有一個可以支付功能的網(wǎng)站?當然可以了!保姆級演示!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前提條件

這是必要條件?。?!
這是必要條件?。?!
這是必要條件!?。?/font>
開通當面付,個人、企業(yè)賬號均可,個人賬號可以私聊我?guī)兔Υ_通,10分鐘就OK !!!


演示

獲取訂單點擊,然后掃碼支付
個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付

支付成功后就會響應支付成功
個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付

應用申請開通和配置

接下來介紹應用的創(chuàng)建和配置,一定要仔細哦?。。?/p>

應用創(chuàng)建

首先進入支付寶開放平臺,進入控制臺,創(chuàng)建一個應用,大概1個工作日內(nèi)就會審核
個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付

把這幾個必填項填寫,然后確認創(chuàng)建,注意名字要清晰,應用圖標要有一定的可識別性,不然不給過,應用類型選網(wǎng)頁應用

個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付

應用配置

創(chuàng)建好后,進入產(chǎn)品詳情頁面,點擊產(chǎn)品綁定,然后去綁定
個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付

選擇支付 -> 當面付[勾選] -> 綁定,另外你還可以找到花唄支付,這樣用戶掃碼時就支持花唄支付了
個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付

要確認是開通狀態(tài)哦,如果沒有開通需要開通哦,看上面的 前提條件
個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付

然后需要配置密鑰,點擊下圖中側(cè)邊欄中的 開發(fā)設置,需要配置的是 接口加簽方式(證書/密鑰)

  • 接口加簽方式(證書/密鑰):配置支付寶開放平臺會引導你下載安裝密鑰生成工具,生成一個應用公鑰和應用私鑰,私鑰一定要保管好,不要泄露,保存到本地,到時候配置在服務器上,然后把應用公鑰配置在開放平臺上,就算配置完成了,支付寶就會給到你一個支付寶公鑰,接下來你一共有三個密鑰,支付寶公鑰、應用公鑰、應用私鑰,這三個一定要分清,接下來文章介紹的所需要用到的密鑰只有這三個,清一定要分清?。。?/li>

個人網(wǎng)站能做付費功能嗎,第三方對接,安全,java,前端,支付,當面付


代碼開發(fā)

接下來你可以結(jié)合著官方的開發(fā)文檔看我的文章,官方文檔:https://opendocs.alipay.com/open/02ekfg?ref=api&scene=19

  • 本文后端以Java的開發(fā)方式,僅供參考!
  • Web前端使用原生Html+CSS+JavaScript簡單實現(xiàn),僅供參考!
  • 安卓調(diào)用可以參考我這篇文章:https://myhub.blog.csdn.net/article/details/128399771

后端實例

SDK集成

首先獲取相應的SDK,SDK下載頁面(官方):https://opendocs.alipay.com/open/54/103419

我這里以Maven的方式集成,另外我集成了zxing,用于生成支付二維碼使用

 <!--alipay SDK-->
<dependency>
	<groupId>com.alipay.sdk</groupId>
	<artifactId>alipay-sdk-java</artifactId>
	<version>4.35.9.ALL</version>
</dependency>

<!-- zxing -->
<dependency>
	<groupId>com.google.zxing</groupId>
	<artifactId>core</artifactId>
	<version>3.5.1</version>
</dependency>

Controller實例

  • 生成付款二維碼,我標明了詳細的注釋,可以直接看!
  • 由于涉及到公鑰、私鑰等信息,這些部分我都用了 **************來表示,
  • 記得替換哦!??!
  • 記得替換哦!?。?/li>
  • 記得替換哦?。?!
  • 替換成你自己的!??!

以下為簡單的Demo演示,一定要結(jié)合官方文檔,閱讀接入注意事項:https://opendocs.alipay.com/open/194/105322

package com.demo.pay;

import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * @author ThirdGoddess
 * @version 1.0.0
 * @time 2022/12/22 14:37
 * @desc AliPay當面付Demo
 */
@RestController
@RequestMapping("pay")
public class AliPayController {

    //模擬一個用戶的支付狀態(tài)
    private boolean userPayState = false;

    //==================================================================================================================
    //這里都是固定的

    //支付寶網(wǎng)關(guān)地址
    private static final String SERVER_URL = "https://openapi.alipay.com/gateway.do";

    //charset
    private static final String CHARSET = "GBK";

    //format
    private static final String FORMAT = "json";

    //sign type
    private static final String SIGN_TYPE = "RSA2";

    //==================================================================================================================
    //下面這三個是需要配置的

    //APPID,即創(chuàng)建應用的那個ID,在應用詳情中的左上角可以看到
    private static final String APPID = "**************";

    //應用私鑰,注意是應用私鑰?。?!應用私鑰!??!應用私鑰?。?!
    private static final String APP_PRIVATE_KEY = "**************";

    //支付寶公鑰,注意是支付寶公鑰?。?!支付寶公鑰!?。≈Ц秾毠€?。?!
    private static final String ALIPAY_PUBLIC_KEY = "**************";

    /**
     * 獲取二維碼
     * 獲取的是用戶要掃碼支付的二維碼
     * 創(chuàng)建訂單,帶入自己的業(yè)務邏輯
     */
    @RequestMapping(value = "/getQr", produces = MediaType.IMAGE_JPEG_VALUE)
    @ResponseBody
    public byte[] getQr() {

        userPayState = false;

        AlipayClient alipayClient = new DefaultAlipayClient(SERVER_URL, APPID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();

        //配置這是一個url,下圖我已經(jīng)配置好了,這個意思是當用戶成功后,支付寶那邊會調(diào)用這個地址url,他會給你傳過去一些訂單信息,
        //你處理完你的業(yè)務邏輯給支付寶響應success就行,就代表這個訂單完成交易了!
        //* 建議前期開發(fā)的時候加上內(nèi)網(wǎng)穿透調(diào)試,不然支付寶是沒有辦法調(diào)到你開發(fā)的接口的
        request.setNotifyUrl("http://**************.com/pay/payNotification");

        JSONObject bizContent = new JSONObject();

        //自己生成一個訂單號,我這里直接用時間戳演示,正常情況下創(chuàng)建完訂單需要存儲到自己的業(yè)務數(shù)據(jù)庫,做記錄和支付完成后校驗
        String orderNumber = "pay" + System.currentTimeMillis();

        bizContent.put("out_trade_no", orderNumber);//訂單號
        bizContent.put("total_amount", 0.01);//訂單金額
        bizContent.put("subject", "demo");//支付主題,自己稍微定義一下
        request.setBizContent(bizContent.toString());

        try {
            AlipayTradePrecreateResponse response = alipayClient.execute(request);
            if (response.isSuccess()) {
                System.out.println("調(diào)用成功");
            } else {
                System.out.println("調(diào)用失敗");
            }

            //獲取生成的二維碼,這里是一個String字符串,即二維碼的內(nèi)容;
            //然后用二維碼生成SDK生成一下二維碼,弄成圖片返回給前端就行,我這里使用Zxing生成
            //其實也可以直接把這個字符串信息返回,讓前端去生成,一樣的道理,只需要關(guān)心這個二維碼的內(nèi)容就行
            String qrCode = response.getQrCode();

            //生成支付二維碼圖片
            BufferedImage image = QrCodeUtil.createImage(qrCode);

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(image, "jpeg", out);
            byte[] b = out.toByteArray();
            out.write(b);
            out.close();

            //最終返回圖片
            return b;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("調(diào)用失敗");
        }
        return null;
    }

    /**
     * 支付完成后支付寶會請求這個回調(diào)
     */
    @PostMapping("payNotification")
    public String payNotification(HttpServletRequest request) {
        Map<String, String> params = new HashMap<>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (String name : requestParams.keySet()) {
            String[] values = requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            params.put(name, valueStr);
        }

        for (Map.Entry<String, String> entry : params.entrySet()) {
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }

        //==============================================================================================================
        try {
            //執(zhí)行驗簽,確保結(jié)果是支付寶回調(diào)的,而不是被惡意調(diào)用,一定要做這一步
            boolean signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, CHARSET, SIGN_TYPE);
            if (signVerified) {
                //驗簽成功,繼續(xù)執(zhí)行業(yè)務邏輯
                System.out.println("驗簽成功");

                //再次主動查詢訂單,不要只依賴支付寶回調(diào)的結(jié)果
                String orderStatus = searchOrderStatus(params.get("out_trade_no"), params.get("trade_no"));
                switch (orderStatus) {
                    case "TRADE_SUCCESS"://交易支付成功;
                    case "TRADE_FINISHED": //交易結(jié)束,不可退款;
                        //TODO 在這里繼續(xù)執(zhí)行用戶支付成功后的業(yè)務邏輯
                        userPayState = true;
                        break;
                }
                return "success";
            } else {
                //驗簽失?。ê芸赡芙涌诒环欠ㄕ{(diào)用)
                System.out.println("驗簽失敗");
                return "fail";
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
            return "fail";
        }
    }

    /**
     * 封裝一個訂單查詢
     *
     * @param outTradeNo 商戶訂單號
     * @param tradeNo    支付寶交易號。支付寶交易憑證號
     * @return 訂單狀態(tài):String
     * @throws AlipayApiException AlipayApiException
     * @desc "WAIT_BUYER_PAY":交易創(chuàng)建,等待買家付款;"TRADE_CLOSED":未付款交易超時關(guān)閉,或支付完成后全額退款; "TRADE_SUCCESS":交易支付成功;"TRADE_FINISHED":交易結(jié)束,不可退款;
     */
    private String searchOrderStatus(String outTradeNo, String tradeNo) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient(SERVER_URL, APPID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); //獲得初始化的AlipayClient
        AlipayTradeQueryRequest aliRequest = new AlipayTradeQueryRequest();//創(chuàng)建API對應的request類
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", outTradeNo);
        bizContent.put("trade_no", tradeNo);
        aliRequest.setBizContent(bizContent.toString()); //設置業(yè)務參數(shù)
        AlipayTradeQueryResponse response = alipayClient.execute(aliRequest);//通過alipayClient調(diào)用API,獲得對應的response類
        JSONObject responseObject = JSONObject.parseObject(response.getBody());
        JSONObject alipayTradeQueryResponse = responseObject.getJSONObject("alipay_trade_query_response");
        return alipayTradeQueryResponse.getString("trade_status");
    }

    /**
     * 前端輪詢查詢這個接口,來查詢訂單的支付狀態(tài)
     *
     * @return OrderStateEntity
     */
    @CrossOrigin
    @GetMapping("searchOrder")
    public OrderStateEntity searchOrder() {
        //userPayState是一個模擬值
        if (userPayState) {
            //用戶支付成功了
            return new OrderStateEntity(200, "支付成功了");
        } else {
            //用戶還沒有支付
            return new OrderStateEntity(201, "你還沒有支付哦");
        }
    }

    /**
     * 響應給前端的實體
     */
    static class OrderStateEntity {
        private int code;
        private String msg;

        public OrderStateEntity(int code, String msg) {
            this.code = code;
            this.msg = msg;
        }

        public int getCode() {
            return code;
        }

        public void setCode(int code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }
    }

}


用戶支付后的回調(diào)

當使用setNotifyUrl后,用戶成功支付后,會回調(diào)其設置的url,如 setNotifyUrl(“http://xxx.com/pay/payNotification”) ,那么支付寶會等待用戶支付成功后會以POST去請求 http://xxx.com/pay/payNotification 這個地址來達成回調(diào),需要響應success或者fail,只有這兩種值哦!

響應值 描述 異步是否重試發(fā)送
fail 消息獲取失敗 重試
success 消息獲取成功 不重試

前端代碼實例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <meta charset="UTF-8">
    <title>支付寶當面付Demo演示</title>
    <style>
        * {
            margin: 0 auto;
        }
        .root {
            width: 260px;
        }
        .img_box {
            width: 260px;
            height: 260px;
            background-color: #adadad;
        }
        button {
            width: 260px;
            margin-top: 12px;
        }
    </style>
</head>
<body>
<div class="root">
    <div class="img_box"><img width="260" height="260" id="qr" src="" alt=""></div>
    <button onclick="getOrderQr()">獲取訂單</button>
    <div class="response" id="response"></div>

    <script>

        /**
         * 獲取一個二維碼
         */
        function getOrderQr() {
            let qrImg = document.getElementById('qr');
            qrImg.src = "http://**************.com/pay/getQr?time=" + new Date().getTime()

            //開始輪詢查詢訂單
            orderResponse()
        }

        let number = 1;
        const responseView = document.getElementById('response')

        /**
         * 循環(huán)查詢訂單響應
         */
        function orderResponse() {

            //每2秒查詢一次支付狀態(tài)
            setTimeout(function () {
                //請求接口查詢支付狀態(tài)
                const xhr = new XMLHttpRequest();
                xhr.open('GET', "http://**************.com/pay/searchOrder", true);
                xhr.send(null);
                xhr.onreadystatechange = function () {
                    if (xhr.status === 200 && xhr.readyState === 4) {
                        const json = JSON.parse(xhr.responseText);
                        if (200 === json.code) {
                            //支付成功
                            responseView.innerText = xhr.responseText
                        } else {
                            //沒有支付,繼續(xù)下一次查詢
                            responseView.innerText = '第' + number + '次查詢,結(jié)果:' + xhr.responseText
                            number++
                            orderResponse()
                        }
                    }
                }
            }, 2000)
        }
    </script>
</div>
</body>
</html>

源碼

Github:https://github.com/ThirdGoddess/aliPay文章來源地址http://www.zghlxwxcb.cn/news/detail-781662.html

到了這里,關(guān)于自己個人擁有一個可以支付功能的網(wǎng)站?當然可以了!保姆級演示!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關(guān)文章

  • Java后臺實現(xiàn)網(wǎng)站微信掃碼登錄功能,獲取用戶openid,及微信用戶信息(小程序碼方案),關(guān)聯(lián)微信小程序(個人主體小程序也可以)

    Java后臺實現(xiàn)網(wǎng)站微信掃碼登錄功能,獲取用戶openid,及微信用戶信息(小程序碼方案),關(guān)聯(lián)微信小程序(個人主體小程序也可以)

    目錄 前言 下面展示操作流程 注冊微信小程序 通過后臺獲取小程序碼 前端處理 時序圖理解 方案實現(xiàn)步驟 前言 很多業(yè)務場景之下我們需要實現(xiàn)? 微信掃碼登錄? 的需求,如: 同步網(wǎng)站與小程序的用戶數(shù)據(jù) 。 需要獲取用戶微信相關(guān)基本信息,如頭像、id等 實例:小程序上的

    2024年02月02日
    瀏覽(24)
  • Windows10中用Docker優(yōu)雅的擁有一個自己的Linux環(huán)境

    使用windows的同學,想學習或者使用Linux環(huán)境時,通常會有 Hyper-v , vmware workstation , virtualbox 等虛擬機再安裝Linux系統(tǒng)。 快使用Docker吧,徹底拋棄虛擬機 安裝docker 請猛戳:?Windows10環(huán)境下安裝Docker - 技術(shù)圈 修改鏡像 為了更快速的拉取鏡像,這里使用阿里的鏡像 啟動Docker后,在

    2024年02月19日
    瀏覽(20)
  • 新手小白如何使用Laf免費接入Claude,并快速擁有一個屬于自己的AI助手

    新手小白如何使用Laf免費接入Claude,并快速擁有一個屬于自己的AI助手

    Claude是一款人工智能聊天機器人。它可以像朋友一樣和你自然地互動聊天。和Claude聊天體驗很像跟人聊天,你可以討論任何話題,問各種各樣的問題。Claude會盡量理解你說的每一句話,并給出合適的回復。相比之下,Chat GPT是一個開源的對話模型,主要用于生成對話的回復內(nèi)

    2024年03月23日
    瀏覽(105)
  • dYdX 在 Cosmos 上部署自己的區(qū)塊鏈、v4 將擁有一個完全去中心化的

    dYdX 在 Cosmos 上部署自己的區(qū)塊鏈、v4 將擁有一個完全去中心化的

    已建立的 DeFi 項目通常不會轉(zhuǎn)而構(gòu)建獨立的區(qū)塊鏈。 但這正是專注于衍生品的去中心化交易所 dYdX 已經(jīng)發(fā)布了開發(fā)自己的區(qū)塊鏈的計劃。 dYdX 鏈將使用 Cosmos SDK 和 Tendermint Proof-of-Stake 共識協(xié)議構(gòu)建。這些技術(shù)是 Cosmos 生態(tài)系統(tǒng)的一部分,COSmos,生態(tài)系統(tǒng)是特定應用區(qū)塊鏈的互

    2023年04月09日
    瀏覽(24)
  • 【網(wǎng)站】讓自己的個人主頁能被Google檢索

    【網(wǎng)站】讓自己的個人主頁能被Google檢索

    參考: https://zhuanlan.zhihu.com/p/129022264 這樣操作之后,等一天左右,個人主頁就能被Google搜索到啦:

    2024年02月07日
    瀏覽(17)
  • 對接銀行支付API,自己的demo可以調(diào)通,放到項目里,卻總提示驗簽失敗。原來竟是因為...

    對接銀行支付API,自己的demo可以調(diào)通,放到項目里,卻總提示驗簽失敗。原來竟是因為...

    對接一個銀行支付通道的支付API,自己java寫的demo可以調(diào)通,放到項目工程里,部署到環(huán)境上,總是收到驗簽失敗的響應。這個問題,困擾我們的開發(fā)大兄弟長達一個星期。 對接通道接口聯(lián)調(diào)不通,常見的場景有許多,如: 簽名原串需要對key進行排序。不同的排序算法會導致

    2024年04月28日
    瀏覽(14)
  • 手機也能輕松搭建個人博客,使用安卓Termux+Hexo建立自己的網(wǎng)站

    手機也能輕松搭建個人博客,使用安卓Termux+Hexo建立自己的網(wǎng)站

    Hexo 是一個用 Nodejs 編寫的快速、簡潔且高效的博客框架。Hexo 使用 Markdown 解析文章,在幾秒內(nèi),即可利用靚麗的主題生成靜態(tài)網(wǎng)頁。 下面介紹在Termux中安裝個人hexo博客并結(jié)合cpolar工具實現(xiàn)遠程訪問。 Hexo 是用 Nodejs 編寫的,所以安裝的話先安裝node.js,termux 也是封裝了,一行命

    2024年02月09日
    瀏覽(37)
  • 使用android studio將網(wǎng)站打包成apk(可以直接使用替換為自己的網(wǎng)站連接即可)

    使用android studio將網(wǎng)站打包成apk(可以直接使用替換為自己的網(wǎng)站連接即可)

    公司有這個需求生成一個webapp應用。前面一直在使用web與Android混合開發(fā),越是后面你就發(fā)現(xiàn)越有意思。hbuildX官網(wǎng)不怎么維護,雖然一直說這是潮流,uni-app開發(fā)也挺火的,但是安卓開發(fā)特別是適配不同的手機型號,真的是頭大。 這是一個適用于Android Studio的模板項目,可讓你

    2024年02月06日
    瀏覽(26)
  • SEO如何讓自己的網(wǎng)站可以在百度搜索到通過關(guān)鍵詞搜索

    SEO如何讓自己的網(wǎng)站可以在百度搜索到通過關(guān)鍵詞搜索

    將你的網(wǎng)站網(wǎng)址提交給百度 在另外的頁面中加入鏈接路徑 選擇完美的 管理您的元標記(meta) 針對移動設備進行優(yōu)化 備案好你的網(wǎng)站 需要了解什么是 SEO以及其對在百度上面被發(fā)現(xiàn)的重要性。雖然您的網(wǎng)站很可能會在某個時候被不斷抓取網(wǎng)絡信息的百度機器人找到,

    2024年02月10日
    瀏覽(39)
  • 10分鐘搭建一個免費個人博客網(wǎng)站

    10分鐘搭建一個免費個人博客網(wǎng)站

    準備工作 有Gitee賬號 有安裝git 會 markdown 編寫文檔 Node.js 版本 = 8.6 博客采用VuePress搭建,Gitee部署,接下來,5步搞定。 1.創(chuàng)建項目 創(chuàng)建項目目錄,并初始化項目,安裝VuePress 2. 創(chuàng)建目錄結(jié)構(gòu) 3.完成基礎配置 配置主題,定義自己的導航欄 配置首頁 在 myblog/package.json 中添加一些

    2024年02月09日
    瀏覽(96)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包