Golang微信支付代碼

說(shuō)明

之前的項(xiàng)目有涉及到支付接口,包括微信和支付寶支付, 現(xiàn)在記錄一下
github地址:Golang-Payment

使用到的庫(kù)

  1. 網(wǎng)上找的微信支付接口代碼 地址,不過(guò)我在項(xiàng)目中需要使用到更多的參數(shù),因此改了小部分源碼。如果使用的話還是需要自己實(shí)現(xiàn)的。
  2. 微信需要自己生成二維碼,因此我找了一個(gè)二維碼的庫(kù) odeke-em/qr,我稍微修改了一下放在vendor目錄下

注意,我使用了beego,所以可能有beego的語(yǔ)法

代碼有兩個(gè)部分

  1. payment/models/Wxpay 這是前面說(shuō)的接口實(shí)現(xiàn)代碼,也需要自己做一些修改。
  2. /payment/controller/wxpay.go wxpay.go

/payment/controller/wxpay.go:

package Payment

import (

"encoding/base64"

"fmt"

"odeke-em/qr"

"os"

"payment/models/Wxpay"

"strconv"

"time"

"github.com/astaxie/beego"

)

type WxpayController struct {

beego.Controller

}

func (this *WxpayController) Native() {

orderNumber := this.Ctx.Input.Param(":id") //獲取訂單號(hào)

payAmount := this.GetString("price") //獲取價(jià)格

params := make(map[string]interface{})

params["body"] = "****company-" + orderNumber //顯示標(biāo)題

params["out_trade_no"] = orderNumber

params["total_fee"] = payAmount

params["product_id"] = orderNumber

params["attach"] = "abc" //自定義參數(shù)

var modwx Wxpay.UnifyOrderReq

res := modwx.CreateOrder(this.Ctx, params)

this.Data["data"] = res

//拿到數(shù)據(jù)之后,需要生成二維碼。

this.Data["Image"] = Img(res.Code_url)

this.TplName = "Wxpay/index.tpl"

}

func (this *WxpayController) Notify() {

var notifyReq Wxpay.WXPayNotifyReq

res := notifyReq.WxpayCallback(this.Ctx)

//beego.Debug("res",res)

if res != nil {

//這里可以組織res的數(shù)據(jù) 處理自己的業(yè)務(wù)邏輯:

sendData := make(map[string]interface{})

sendData["id"] = res["out_trade_no"]

sendData["trade_no"] = res["transaction_id"]

paid_time, _ := time.Parse("20060102150405", res["time_end"].(string))

paid_timestr := paid_time.Format("2006-01-02 15:04:05")

sendData["paid_time"] = paid_timestr

sendData["payment_type"] = "wxpay"

intfee := res["cash_fee"].(int)

floatfee := float64(intfee)

cashfee := floatfee / 100

sendData["payment_amount"] = strconv.FormatFloat(cashfee, 'f', 2, 32)

//api(sendData)...自己的邏輯處理

//

}

}

func Img(url string) string {

code, err := qr.Encode(url, qr.H)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

imgByte := code.PNG()

str := base64.StdEncoding.EncodeToString(imgByte)

return str

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,181評(píng)論 25 708
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,648評(píng)論 19 139
  • 早上猛一睜眼,剛快看了下手機(jī),過(guò)了六點(diǎn)二十,迅速的穿衣服,臉未洗牙未刷急急準(zhǔn)備門(mén)。閨女已經(jīng)睡醒了,坐在床上...
    rainbow田田閱讀 266評(píng)論 1 1
  • 約定 有很多人會(huì)將Java NIO分為Java NIO和Java NIO2,分別指jdk1.4引入的新IO和jdk...
    墻角兒的花閱讀 1,039評(píng)論 0 4
  • 剛剛?cè)タ戳松〉木斯K呀?jīng)是96歲高齡。此時(shí),他生命垂危,臉上掛著呼吸器,手上都扎著輸液管,身上插滿了各種管子和...
    王櫟涵閱讀 662評(píng)論 12 9

友情鏈接更多精彩內(nèi)容