首頁 後端開發 Golang golang付款怎麼用

golang付款怎麼用

May 10, 2023 am 10:54 AM

Go語言是一種編譯型的、並發的、具有垃圾回收功能的程式語言,具有簡潔、快速、安全等優點,因此在近年來得到了越來越多開發者和企業的青睞。在Go語言應用程式中實現支付功能是很常見的需求,而本文將簡單介紹如何使用Go語言實現付款功能。

一、選擇支付管道

在實現付款功能之前,第一步必須要做的就是選擇一個可靠的支付管道。目前,市場上提供了眾多的支付管道,例如支付寶、微信支付、銀聯支付等。本文將以支付寶為例,簡單介紹如何使用Go語言實作支付功能。

二、開通支付寶開發者帳號

在使用支付寶支付之前,需要在支付寶官網上開通開發者帳號,並且根據需要選擇相應的接入方式。這裡不再贅述,讀者可以自行查閱支付寶開發文件。

三、安裝支付寶SDK

支付寶SDK是一套官方提供的工具包,可以幫助我們實現支付寶支付功能。在Go語言中,可以使用以下指令安裝開發包:

1

go get -u github.com/smartwalle/alipay/v3

登入後複製

其中,「smartwalle/alipay/v3」是一個開源Go語言的支付寶SDK,它提供了支付寶支付所需的所有功能。

四、建立支付寶客戶端

在進行支付寶支付之前,需要先建立一個支付寶客戶端,程式碼如下:

1

2

3

4

5

6

7

8

9

10

11

import (

    "github.com/smartwalle/alipay/v3"

    "github.com/smartwalle/alipay/v3/constant"

)

 

func NewAlipayClient(appID, privateKey, publicKey string) *alipay.Client {

    client := alipay.New(appID, privateKey, false)

    client.SetSignType(constant.RSA2)

    client.SetPublicKey(publicKey)

    return client

}

登入後複製

其中,appID、privateKey和publicKey是在支付寶開發者後台中取得的。

五、發起支付

在創建了支付寶客戶端之後,就可以發起支付請求了。以建立支付寶付款二維碼為例,範例程式碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

import (

    "github.com/smartwalle/alipay/v3"

    "github.com/smartwalle/alipay/v3/constant"

    "github.com/smartwalle/alipay/v3/requests"

    "github.com/smartwalle/alipay/v3/sign"

)

 

func BuildAlipayQROrder(client *alipay.Client, subject, outTradeNo, totalAmount, notifyURL string) (string, error) {

    p := requests.TradePrecreate{

        Subject:     subject,

        OutTradeNo:  outTradeNo,

        TotalAmount: totalAmount,

        NotifyURL:   notifyURL,

    }

 

    signType := client.GetSignType()

    if signType == constant.RSA || signType == constant.RSA2 {

        b, err := sign.AliPayURLValues(p)

        if err != nil {

            return "", err

        }

        p.Sign = sign.SignWithPKCS1v15(string(b), client.PrivateKey, signType)

    }

 

    resp, err := client.TradePrecreate(p)

    if err != nil {

        return "", err

    }

 

    if resp.Content.Code == "10000" {

        return resp.Content.QRCode, nil

    } else {

        return "", fmt.Errorf("[%s] %s", resp.Content.Code, resp.Content.Msg)

    }

}

登入後複製

這裡將TradePrecreate介面封裝為了BuildAlipayQROrder方法。其中,subject為商品名稱,outTradeNo為商家訂單號,totalAmount為訂單金額,notifyURL為付款結果通知地址,QRCode為產生的支付寶掃碼付款二維碼。

六、處理付款結果

當用戶完成付款之後,支付寶會非同步通知商家支付結果,在開發中需要及時處理。程式碼範例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

import (

    "github.com/smartwalle/alipay/v3"

    "github.com/smartwalle/alipay/v3/constant"

    "github.com/smartwalle/alipay/v3/requests"

)

 

// 处理支付宝异步通知

func HandleAlipayNotify(client *alipay.Client, params alipay.NotifyParams) error {

    b, err := json.Marshal(params)

    if err != nil {

        return err

    }

 

    if err := client.CheckNotifySign(string(b)); err != nil {

        return err

    }

 

    switch params.TradeStatus {

    case "TRADE_SUCCESS":

        tradeQuery, err := client.TradeQuery(requests.TradeQuery{

            OutTradeNo: params.OutTradeNo,

            TradeNo:    params.TradeNo,

        })

        if err != nil {

            return err

        }

 

        if tradeQuery.Content.TradeStatus == "TRADE_SUCCESS" {

            // 订单处理成功,执行自己的业务逻辑

        }

    case "TRADE_CLOSED":

        // 订单已关闭,执行自己的业务逻辑

    default:

        return fmt.Errorf("unsupported trade status: %s", params.TradeStatus)

    }

 

    return nil

 

}

登入後複製

根據支付寶非同步通知的參數,可以透過呼叫TradeQuery介面查詢訂單支付狀態,最終根據實際的支付結果執行自己的業務邏輯。

七、總結

本文介紹如何使用Go語言實現支付寶支付功能。首先需要開通支付寶開發者帳號,並選擇對應的接入方式。然後,透過安裝支付寶SDK,建立支付寶客戶端,啟動付款請求和處理付款結果,最終實現了簡單的支付寶支付功能。在實際應用中,可能還需要根據自己的需求進行進一步的調整。

以上是golang付款怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go語言包導入:帶下劃線和不帶下劃線的區別是什麼? Go語言包導入:帶下劃線和不帶下劃線的區別是什麼? Mar 03, 2025 pm 05:17 PM

Go語言包導入:帶下劃線和不帶下劃線的區別是什麼?

Beego框架中NewFlash()函數如何實現頁面間短暫信息傳遞? Beego框架中NewFlash()函數如何實現頁面間短暫信息傳遞? Mar 03, 2025 pm 05:22 PM

Beego框架中NewFlash()函數如何實現頁面間短暫信息傳遞?

Go語言中如何將MySQL查詢結果List轉換為自定義結構體切片? Go語言中如何將MySQL查詢結果List轉換為自定義結構體切片? Mar 03, 2025 pm 05:18 PM

Go語言中如何將MySQL查詢結果List轉換為自定義結構體切片?

如何編寫模擬對象和存根以進行測試? 如何編寫模擬對象和存根以進行測試? Mar 10, 2025 pm 05:38 PM

如何編寫模擬對象和存根以進行測試?

如何定義GO中仿製藥的自定義類型約束? 如何定義GO中仿製藥的自定義類型約束? Mar 10, 2025 pm 03:20 PM

如何定義GO中仿製藥的自定義類型約束?

如何使用跟踪工具了解GO應用程序的執行流? 如何使用跟踪工具了解GO應用程序的執行流? Mar 10, 2025 pm 05:36 PM

如何使用跟踪工具了解GO應用程序的執行流?

您如何在GO中編寫單元測試? 您如何在GO中編寫單元測試? Mar 21, 2025 pm 06:34 PM

您如何在GO中編寫單元測試?

Go語言如何便捷地寫入文件? Go語言如何便捷地寫入文件? Mar 03, 2025 pm 05:15 PM

Go語言如何便捷地寫入文件?

See all articles