ホームページ  >  記事  >  バックエンド開発  >  Golang を使用して Web アプリケーションの支払いインターフェイスを実装する方法

Golang を使用して Web アプリケーションの支払いインターフェイスを実装する方法

PHPz
PHPzオリジナル
2023-06-24 11:00:011291ブラウズ

電子商取引とインターネットの発展に伴い、支払いインターフェイスは現代のビジネスに不可欠な部分になりました。 Web アプリケーション開発では、シンプルで使いやすい言語を使用して支払いインターフェイスの統合を完了する方法が特に重要です。 Golang は、効率的で信頼性が高く同時実行性の高いプログラミング言語です。その構文は簡潔で、大量のデータを効率的に処理できるため、ますます多くの開発者によって使用されています。この記事では、Golang を使用して Web アプリケーションの支払いインターフェイスを作成する方法について説明します。

  1. 支払いインターフェイス プロバイダーの選択

支払いインターフェイスを実装する前に、まず Web アプリケーションと対話するための支払いインターフェイス プロバイダーを選択する必要があります。市場には、Alipay、WeChat Pay、Tenpay など、多くの有名な支払いインターフェイス プロバイダーがあります。ここではAlipayを例に挙げて説明します。

  1. 見積支払いインターフェイス SDK

Alipay は SDK の Go 言語バージョンを提供しており、これには sdk、util、openapi およびその他のパッケージが含まれています。バッグを使用しています。たとえば、Alipay のモバイル Web サイトを使用して支払いを行う必要がある場合は、次のようにコード内で SDK を参照できます。

import (
    "fmt"
    "github.com/alipay/alipay-sdk-go"
    "github.com/alipay/alipay-sdk-go/request"
)
  1. 販売者の支払い情報の構成

Before Alipay SDK を使用する場合は、最初に販売者の支払い情報を設定する必要があります。具体的には、Alipay オープン プラットフォーム上にアプリケーションを作成し、アプリケーションの公開キー、秘密キー、APP_ID などの情報を設定する必要があります。支払いプロセス中に、Alipay はこの情報を使用して受信した注文を確認し、注文の信頼性を確認します。

var (
    client *alipay.Client
)

func init() {
    // 初始化支付宝客户端
    var err error
    client, err = alipay.New(config.APP_ID, config.ALIPAY_PUBLIC_KEY, config.PRIVATE_KEY, false)
    if err != nil {
        panic(err)
    }
}
  1. 注文の作成

Web アプリケーションでは、ユーザーが支払い情報の入力を完了したら、ユーザーが送信した注文情報を Alipay に送信する必要があります。注文を作成するときは、Alipay が提供する対応する API を呼び出し、一意の販売者注文番号を生成し、注文情報を暗号化して Alipay に送信する必要があります。注文が正常に作成されると、Alipay から支払いリンクが返され、ユーザーは Alipay の支払いページにリダイレクトされ、支払いページで、ユーザーは Alipay アカウントまたはその他の支払い方法を使用して支払うことができます。

// 创建支付宝订单
func createAliPayOrder(c *gin.Context) {
    // 订单号
    outTradeNo := "201910020809"
    // 商品名称
    subject := "Macbook Pro"
    // 订单总金额,单位为元
    totalAmount := 1000.00
    // 商户ID
    sellerID := config.SELLER_ID

    // 构造请求参数
    resp, err := client.TradePagePay(&request.TradePagePay{
        OutTradeNo: outTradeNo,
        ProductCode: "FAST_INSTANT_TRADE_PAY",
        TotalAmount: strconv.FormatFloat(totalAmount, 'f', 2, 64),
        Subject: subject,
        SellerID: sellerID,
        ReturnURL: "http://localhost:8080/return",
        NotifyURL: "http://localhost:8080/notify",
        Body: "Macbook Pro 2019",
    })

    if err != nil {
        fmt.Printf("create ali pay order failed: %v", err)
        return
    }

    // 将支付链接返回给客户端
    c.JSON(http.StatusOK, gin.H{
        "code": 1000,
        "msg": "success",
        "data": gin.H{
            "pay_url": resp,
        },
    })
}
  1. 支払い結果コールバックの処理

ユーザーが支払いを完了すると、Alipay は非同期コールバックを通じて注文の支払い結果を Web アプリケーションに送信します。 Alipay の非同期通知機能を使用する前に、Alipay オープン プラットフォームで関連する設定を行う必要があります。具体的には、非同期コールバックに固定 URL を指定する必要があり、Alipay が結果を通知すると、この URL に通知が送信され、Post メソッドを通じて支払い情報が送信されます。

// 处理支付结果回调
func handleAliPayNotify(c *gin.Context) {
    // 获取支付宝通知结果
    params := make(map[string]string)
    err := c.Request.ParseForm()
    if err != nil {
        c.JSON(http.StatusOK, gin.H{
            "code": 2000,
            "msg": "invalid parameters",
            "data": "",
        })
        return
    }

    for k, v := range c.Request.Form {
        params[k] = strings.Join(v, "")
    }

    // 验证通知结果的真实性
    if err := client.VerifySign(params); err != nil {
        c.JSON(http.StatusOK, gin.H{
            "code": 2000,
            "msg": "invalid signature",
            "data": "",
        })
        return
    }

    // 业务处理
    outTradeNo := params["out_trade_no"]
    tradeNo := params["trade_no"]
    c.JSON(http.StatusOK, gin.H{
        "code": 1000,
        "msg": "success",
        "data": gin.H{
            "out_trade_no": outTradeNo,
            "trade_no": tradeNo,
        },
    })
}

上記は、Golang を使用して Web アプリケーションの支払いインターフェイスを実装する基本的なプロセスです。この記事では、前述の Alipay SDK を例として説明しますが、他の決済インターフェイスでも一般的に使用される手順は同様です。支払いインターフェイスを実装する場合は、販売者の注文番号の一意性の確保や支払い情報の改ざん防止など、セキュリティに注意する必要があります。同時に、特定のニーズに応じて支払いインターフェイスを最適化し、他の API 呼び出しを追加してユーザー エクスペリエンスを向上させることができます。

以上がGolang を使用して Web アプリケーションの支払いインターフェイスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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