Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan Golang untuk melaksanakan antara muka pembayaran untuk aplikasi web

Cara menggunakan Golang untuk melaksanakan antara muka pembayaran untuk aplikasi web

PHPz
PHPzasal
2023-06-24 11:00:011235semak imbas

Dengan perkembangan e-dagang dan Internet, antara muka pembayaran telah menjadi bahagian penting dalam perniagaan moden. Dalam pembangunan aplikasi web, cara menggunakan bahasa yang ringkas dan mudah digunakan untuk melengkapkan penyepaduan antara muka pembayaran adalah amat penting. Golang ialah bahasa pengaturcaraan yang cekap, boleh dipercayai dan sangat bersesuaian Sintaksnya ringkas dan ia boleh memproses sejumlah besar data dengan cekap oleh itu, ia digunakan oleh semakin ramai pembangun. Artikel ini menerangkan cara menggunakan Golang untuk menulis antara muka pembayaran untuk aplikasi web.

  1. Pilih penyedia antara muka pembayaran

Sebelum melaksanakan antara muka pembayaran, anda perlu terlebih dahulu memilih penyedia antara muka pembayaran untuk berinteraksi dengan aplikasi web anda. Terdapat banyak penyedia antara muka pembayaran yang terkenal di pasaran, seperti Alipay, WeChat Pay, Tenpay, dll. Di sini kami mengambil Alipay sebagai contoh untuk dijelaskan.

  1. Rujuk SDK antara muka pembayaran

Alipay menyediakan versi bahasa Go bagi SDK, yang termasuk sdk, util, openapi dan pakej lain yang sepadan sebelum menggunakan Beg. Contohnya, jika anda perlu menggunakan tapak web mudah alih Alipay untuk membayar, anda boleh merujuk SDK dalam kod seperti berikut:

import (
    "fmt"
    "github.com/alipay/alipay-sdk-go"
    "github.com/alipay/alipay-sdk-go/request"
)
  1. Konfigurasikan maklumat pembayaran pedagang

Sebelum menggunakan SDK Alipay , anda perlu mengkonfigurasi maklumat pembayaran pedagang terlebih dahulu. Khususnya, anda perlu membuat aplikasi pada platform terbuka Alipay dan mengkonfigurasi kunci awam, kunci peribadi, APP_ID dan maklumat lain aplikasi. Semasa proses pembayaran, Alipay akan menggunakan maklumat ini untuk mengesahkan pesanan yang diterima bagi memastikan kesahihan pesanan.

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. Buat pesanan

Dalam aplikasi web, selepas pengguna selesai mengisi maklumat pembayaran, maklumat pesanan yang diserahkan oleh pengguna perlu dihantar ke Alipay. Apabila membuat pesanan, anda perlu menghubungi API sepadan yang disediakan oleh Alipay, menjana nombor pesanan pedagang yang unik, menyulitkan maklumat pesanan dan menyerahkannya kepada Alipay. Jika pesanan berjaya dibuat, Alipay akan mengembalikan pautan pembayaran, yang boleh mengubah hala pengguna ke halaman pembayaran Alipay Pada halaman pembayaran, pengguna boleh membayar menggunakan akaun Alipay atau kaedah pembayaran lain.

// 创建支付宝订单
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. Memproses panggilan balik hasil pembayaran

Apabila pengguna menyelesaikan pembayaran, Alipay akan menghantar hasil pembayaran pesanan ke aplikasi web melalui panggilan balik tak segerak. Sebelum menggunakan fungsi pemberitahuan tak segerak Alipay, kami perlu membuat konfigurasi yang berkaitan dalam platform terbuka Alipay. Khususnya, kami perlu menyediakan URL tetap untuk panggilan balik tak segerak Apabila Alipay memberitahu keputusan, ia akan menghantar pemberitahuan ke URL ini dan membawa maklumat pembayaran melalui kaedah Pos.

// 处理支付结果回调
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,
        },
    })
}

Di atas adalah proses asas menggunakan Golang untuk melaksanakan antara muka pembayaran aplikasi web. Artikel ini menggunakan Alipay SDK yang disebut di atas sebagai contoh untuk menerangkan, tetapi langkah yang biasa digunakan oleh antara muka pembayaran lain adalah serupa. Apabila melaksanakan antara muka pembayaran, anda perlu memberi perhatian kepada keselamatan, seperti memastikan keunikan nombor pesanan pedagang dan mengelakkan maklumat pembayaran daripada diganggu. Pada masa yang sama, kami boleh mengoptimumkan antara muka pembayaran mengikut keperluan khusus dan menambah panggilan API lain untuk meningkatkan pengalaman pengguna.

Atas ialah kandungan terperinci Cara menggunakan Golang untuk melaksanakan antara muka pembayaran untuk aplikasi web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn