Golang微信支付代碼

說明

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

使用到的庫

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

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

代碼有兩個部分

  1. payment/models/Wxpay 這是前面說的接口實現代碼,也需要自己做一些修改。
  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") //獲取訂單號

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

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

params["body"] = "****company-" + orderNumber //顯示標題

params["out_trade_no"] = orderNumber

params["total_fee"] = payAmount

params["product_id"] = orderNumber

params["attach"] = "abc" //自定義參數

var modwx Wxpay.UnifyOrderReq

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

this.Data["data"] = res

//拿到數據之后,需要生成二維碼。

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的數據 處理自己的業務邏輯:

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

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,065評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,868評論 18 139
  • 早上猛一睜眼,剛快看了下手機,過了六點二十,迅速的穿衣服,臉未洗牙未刷急急準備門。閨女已經睡醒了,坐在床上...
    rainbow田田閱讀 246評論 1 1
  • 約定 有很多人會將Java NIO分為Java NIO和Java NIO2,分別指jdk1.4引入的新IO和jdk...
    墻角兒的花閱讀 980評論 0 4
  • 剛剛去看了生病的舅公。他已經是96歲高齡。此時,他生命垂危,臉上掛著呼吸器,手上都扎著輸液管,身上插滿了各種管子和...
    王櫟涵閱讀 550評論 12 9