首頁  >  文章  >  後端開發  >  golang付款怎麼用

golang付款怎麼用

王林
王林原創
2023-05-10 10:54:36927瀏覽

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

一、選擇支付管道

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

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

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

三、安裝支付寶SDK

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

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

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

四、建立支付寶客戶端

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

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是在支付寶開發者後台中取得的。

五、發起支付

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

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為產生的支付寶掃碼付款二維碼。

六、處理付款結果

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

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