Maison  >  Article  >  développement back-end  >  Comment utiliser le paiement Golang

Comment utiliser le paiement Golang

王林
王林original
2023-05-10 10:54:36929parcourir

Le langage Go est un langage de programmation compilé et concurrent avec une fonction de récupération de place. Il présente les avantages de simplicité, de rapidité, de sécurité, etc., il a donc été favorisé par de plus en plus de développeurs et d'entreprises ces dernières années. Il est très courant d'implémenter des fonctions de paiement dans les applications en langage Go, et cet article présentera brièvement comment utiliser le langage Go pour implémenter des fonctions de paiement.

1. Choisissez un canal de paiement

Avant de mettre en œuvre la fonction de paiement, la première étape que vous devez faire est de choisir un canal de paiement fiable. Actuellement, le marché propose de nombreux canaux de paiement, tels qu'Alipay, WeChat Pay, UnionPay Pay, etc. Cet article prendra Alipay comme exemple pour présenter brièvement comment utiliser le langage Go pour implémenter les fonctions de paiement.

2. Ouvrez un compte développeur Alipay

Avant d'utiliser Alipay pour payer, vous devez ouvrir un compte développeur sur le site officiel d'Alipay et sélectionner la méthode d'accès correspondante selon vos besoins. Je n’entrerai pas dans les détails ici, les lecteurs peuvent se référer eux-mêmes aux documents de développement d’Alipay.

3. Installez Alipay SDK

Alipay SDK est une boîte à outils officiellement fournie qui peut nous aider à mettre en œuvre les fonctions de paiement Alipay. En langage Go, vous pouvez utiliser la commande suivante pour installer le package de développement :

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

Parmi eux, « smartwalle/alipay/v3 » est un SDK Alipay open source en langage Go, qui fournit toutes les fonctions requises pour le paiement Alipay.

4. Créer un client Alipay

Avant d'effectuer un paiement Alipay, vous devez créer un client Alipay. Le code est le suivant :

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
}

Parmi eux, appID, privateKey et publicKey sont obtenus à partir du backend du développeur Alipay.

5. Initier le paiement

Après avoir créé le client Alipay, vous pouvez lancer une demande de paiement. En prenant comme exemple la création du code QR de paiement Alipay, l'exemple de code est le suivant :

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)
    }
}

Ici, l'interface TradePrecreate est encapsulée dans la méthode BuildAlipayQROrder. Parmi eux, le sujet est le nom du produit, outTradeNo est le numéro de commande du commerçant, totalAmount est le montant de la commande, notifyURL est l'adresse de notification du résultat du paiement et QRCode est le code QR de paiement généré par Alipay scan.

6. Traitement des résultats du paiement

Une fois le paiement effectué par l'utilisateur, Alipay informera le commerçant de manière asynchrone du résultat du paiement, qui doit être traité en temps opportun pendant le développement. L'exemple de code est le suivant :

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

}

Selon les paramètres de notification asynchrone Alipay, vous pouvez interroger l'état de paiement de la commande en appelant l'interface TradeQuery, et enfin exécuter votre propre logique métier basée sur les résultats de paiement réels.

7. Résumé

Cet article présente comment utiliser le langage Go pour implémenter la fonction de paiement Alipay. Tout d'abord, vous devez ouvrir un compte développeur Alipay et sélectionner la méthode d'accès correspondante. Ensuite, en installant le SDK Alipay, en créant un client Alipay, en lançant les demandes de paiement et en traitant les résultats des paiements, une fonction de paiement Alipay simple a finalement été réalisée. Dans les applications réelles, des ajustements supplémentaires peuvent être nécessaires en fonction de vos propres besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:interfaces et méthodes golangArticle suivant:interfaces et méthodes golang