Dengan mempopularkan Internet mudah alih, populariti beli-belah dalam talian dan pembayaran mudah alih, Alipay telah menjadi semakin penting dalam kehidupan orang ramai, dan antara muka Alipay telah menjadi salah satu kemahiran yang mesti dikuasai oleh pembangun. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan antara muka Alipay aplikasi web.
Pertama, kita perlu mendaftar akaun pada platform pembangun Alipay dan membuat aplikasi. Semasa membuat aplikasi, anda perlu mengisi nama aplikasi, jenis aplikasi, alamat panggilan balik aplikasi dan maklumat lain, dan menjana ID aplikasi dan kunci peribadi Maklumat ini akan digunakan dalam panggilan antara muka yang berikutnya.
Seterusnya, kita perlu menggunakan Golang untuk menulis kod untuk memanggil antara muka Alipay. Pertama, kita perlu memperkenalkan pakej yang diperlukan:
import ( "bytes" "crypto" "crypto/rsa" "crypto/x509" "encoding/base64" "encoding/json" "fmt" "io/ioutil" "net/http" "net/url" "sort" "strings" "time" )
Seterusnya, kita perlu menentukan beberapa pembolehubah. Antaranya, nilai pembolehubah seperti appId, privateKey, publicKey, gatewayUrl, charset, signType dan format perlu diubah suai mengikut maklumat aplikasi anda.
const ( appId = "xxx" privateKey = `xxx` publicKey = `xxx` gatewayUrl = "https://openapi.alipay.com/gateway.do" charset = "utf-8" signType = "RSA2" format = "json" )
Antaranya, privateKey dan publicKey perlu digantikan dengan kunci peribadi aplikasi dan kunci awam Alipay yang diperoleh daripada platform pembangun Alipay, ia disimpan dalam pemalar .
Seterusnya, kita perlu menentukan beberapa struktur untuk menghuraikan data JSON yang dikembalikan oleh antara muka Alipay:
type AlipayResponse struct { Code string `json:"code"` Msg string `json:"msg"` SubCode string `json:"sub_code"` SubMsg string `json:"sub_msg"` } type TradePrecreateResponse struct { AlipayResponse OutTradeNo string `json:"out_trade_no"` QrCode string `json:"qr_code"` }
Hanya satu struktur TradePrecreateResponse ditakrifkan di sini, yang digunakan untuk menghuraikan data JSON yang dikembalikan oleh antara muka pesanan penciptaan Alipay.
Seterusnya, kita perlu menentukan beberapa fungsi. Pertama, kita perlu menentukan fungsi untuk menjana tandatangan.
func generateSign(params url.Values) string { keys := make([]string, 0, len(params)) for key := range params { keys = append(keys, key) } sort.Strings(keys) var sortedParams bytes.Buffer for _, key := range keys { values := params[key] value := "" if len(values) > 0 { value = values[0] } sortedParams.WriteString(key) sortedParams.WriteString("=") sortedParams.WriteString(value) sortedParams.WriteString("&") } sortedParams.Truncate(sortedParams.Len() - 1) h := crypto.SHA256.New() h.Write(sortedParams.Bytes()) privateKeyByte := []byte(privateKey) block, _ := pem.Decode(privateKeyByte) privateKey, _ := x509.ParsePKCS8PrivateKey(block.Bytes) signature, err := rsa.SignPKCS1v15(nil, privateKey.(*rsa.PrivateKey), crypto.SHA256, h.Sum(nil)) if err != nil { panic(err) } return base64.StdEncoding.EncodeToString(signature) }
Fungsi ini mula-mula mengisih parameter dalam susunan leksikografi, kemudian menggunakan algoritma SHA256 untuk mengira ringkasan parameter, kemudian menggunakan kunci peribadi aplikasi untuk menandatangani ringkasan, dan akhirnya base64 mengekod tandatangan.
Seterusnya, kita perlu menentukan fungsi untuk menghantar permintaan ke antara muka Alipay:
func doRequest(apiName string, bizContent map[string]interface{}) (string, error) { var ( response *http.Response err error ) params := url.Values{} params.Set("app_id", appId) params.Set("method", apiName) params.Set("version", "1.0") params.Set("format", format) params.Set("charset", charset) params.Set("sign_type", signType) params.Set("timestamp", time.Now().Format("2006-01-02 15:04:05")) params.Set("biz_content", toJsonString(bizContent)) params.Set("sign", generateSign(params)) url := gatewayUrl + "?" + params.Encode() if response, err = http.Get(url); err != nil { return "", err } defer response.Body.Close() if body, err := ioutil.ReadAll(response.Body); err != nil { return "", err } else { return string(body), nil } }
Fungsi ini mula-mula mengatur parameter ke dalam rentetan URL dan menggunakan fungsi generateSign untuk menjana tandatangan. Selepas itu, hantar rentetan URL ini ke antara muka Alipay dan tunggu hasil pulangan daripada Alipay. Akhirnya, hasil yang dikembalikan ditukar kepada rentetan dan dikembalikan.
Pada ketika ini, kami telah menyelesaikan permintaan untuk antara muka Alipay Langkah seterusnya ialah cara memanggil fungsi ini untuk melaksanakan fungsi mencipta antara muka pra-pesanan. Berikut ialah contoh fungsi:
func tradePrecreate(subject, outTradeNo string, totalAmount float32) (*TradePrecreateResponse, error) { bizContent := make(map[string]interface{}) bizContent["out_trade_no"] = outTradeNo bizContent["total_amount"] = fmt.Sprintf("%.2f", totalAmount) bizContent["subject"] = subject bizContent["timeout_express"] = "30m" responseStr, err := doRequest("alipay.trade.precreate", bizContent) if err != nil { return nil, err } var response TradePrecreateResponse if err := json.Unmarshal([]byte(responseStr), &response); err != nil { return nil, err } if response.Code != "10000" { return nil, fmt.Errorf("%s (%s)", response.Msg, response.SubMsg) } return &response, nil }
Fungsi ini mula-mula mengatur beberapa parameter, seperti nombor pesanan pedagang, jumlah pesanan, tajuk pesanan, dll., kemudian memanggil fungsi doRequest untuk menghantar permintaan dan menghuraikan hasil yang dikembalikan. Jika kod dalam hasil yang dikembalikan ialah 10000, ini bermakna permintaan itu berjaya, jika tidak, ini bermakna permintaan itu gagal, dan dalam kes ini, mesej ralat perlu dikembalikan.
Akhir sekali, kita boleh menggunakan fungsi ini dalam aplikasi web untuk melaksanakan antara muka Alipay. Contohnya, dalam gin rangka kerja web bahasa Go, anda boleh memanggil fungsi di atas seperti ini:
func createOrder(c *gin.Context) { subject := "Test Order" outTradeNo := "12345" totalAmount := 1.00 response, err := tradePrecreate(subject, outTradeNo, totalAmount) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"qr_code": response.QrCode}) }
Fungsi ini akan menjana pesanan pedagang, kemudian memanggil fungsi tradePrecreate untuk menjana prapesanan, dan mengembalikan respons JSON dengan Kod QR.
Akhir sekali, mari kita ringkaskan langkah-langkah di atas: Pertama, anda perlu mendaftar akaun pada platform pembangun Alipay dan mencipta aplikasi, dan menjana ID aplikasi dan kunci peribadi kemudian, gunakan Golang untuk menulis kod untuk memanggil antara muka Alipay dan tentukan beberapa struktur, Fungsi dan pembolehubah akhirnya, fungsi ini digunakan dalam aplikasi web untuk melaksanakan antara muka Alipay.
Di atas adalah langkah dan kaedah untuk menggunakan Golang untuk melaksanakan antara muka Alipay aplikasi web saya harap ia akan membantu anda.
Atas ialah kandungan terperinci Cara menggunakan Golang untuk melaksanakan antara muka Alipay bagi aplikasi web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!