Golang微信支付代码

cowkeys · · 5923 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

说明

之前的项目有涉及到支付接口,包括微信和支付宝支付, 现在记录一下
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

}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:cowkeys

查看原文:Golang微信支付代码

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5923 次点击  
加入收藏 微博
1 回复  |  直到 2019-07-23 15:52:34
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传