ホームページ  >  記事  >  バックエンド開発  >  golang決済の使い方

golang決済の使い方

王林
王林オリジナル
2023-05-10 10:54:36927ブラウズ

Go 言語は、コンパイル、同時実行、ガベージ コレクションを行うプログラミング言語であり、シンプルさ、速度、セキュリティという利点があるため、近年ますます多くの開発者や企業に好まれています。 Go 言語アプリケーションに支払い機能を実装することは非常に一般的な要件です。この記事では、Go 言語を使用して支払い機能を実装する方法を簡単に紹介します。

1. 支払いチャネルの選択

支払い機能を実装する前に、最初に行う必要があるのは、信頼できる支払いチャネルを選択することです。現在、市場では Alipay、WeChat Pay、UnionPay Pay などの多数の支払いチャネルが提供されています。この記事では、Alipayを例に、Go言語を使用して決済機能を実装する方法を簡単に紹介します。

2. Alipay 開発者アカウントを開設する

Alipay を使用して支払いを行う前に、Alipay 公式 Web サイトで開発者アカウントを開設し、必要に応じて対応するアクセス方法を選択する必要があります。ここでは詳細には触れませんが、読者は Alipay の開発ドキュメントをご自身で参照していただけます。

3. Alipay SDK のインストール

Alipay SDK は、Alipay 支払い機能の実装に役立つ公式に提供されたツールキットです。 Go 言語では、次のコマンドを使用して開発パッケージをインストールできます。

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

このうち、「smartwalle/alipay/v3」はオープンソースの Go 言語 Alipay SDK であり、Alipay に必要なすべての機能を提供します。支払い。

4. Alipay クライアントの作成

Alipay 支払いを行う前に、まず Alipay クライアントを作成する必要があります。コードは次のとおりです:

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 は Alipay Developer Backend から取得されます。

5. 支払いの開始

Alipay クライアントを作成した後、支払いリクエストを開始できます。 Alipay 支払い QR コードの作成を例にとると、サンプル コードは次のとおりです。

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 は生成された Alipay スキャン決済 QR コードです。

6. 支払い結果の処理

ユーザーが支払いを完了すると、Alipay は販売者に支払い結果を非同期的に通知しますが、開発中にタイムリーに処理する必要があります。コード例は次のとおりです。

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

}

Alipay 非同期通知のパラメーターに従って、TradeQuery インターフェイスを呼び出して注文の支払いステータスをクエリし、最終的に実際の支払い結果に基づいて独自のビジネス ロジックを実行できます。

7. 概要

この記事では、Go 言語を使用して Alipay の決済機能を実装する方法を紹介します。まず、Alipay 開発者アカウントを開き、対応するアクセス方法を選択する必要があります。そして、Alipay SDKをインストールし、Alipayクライアントを作成し、支払いリクエストを開始し、支払い結果を処理することで、最終的にシンプルなAlipay支払い機能が実現されました。実際のアプリケーションでは、必要に応じてさらに調整が必要になる場合があります。

以上がgolang決済の使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。