您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Go语言

Golang超好用的WeChat类库

时间:2020-08-31 12:39:39  来源:  作者:

作为一个后端开发人员来说,微信开发已经是必备的技能之一了,今天小编就来分享一个相关的类库shenghui0779/gochat(以下简称wechat)。这个类库简单易用,看源码的时候目录结构一目了然,可以看出作者的思路很清晰,功能也挺丰富日常开发来绝对够用。下面跟着小编的节凑来一探究竟吧。

目录结构

 

Golang超好用的WeChat类库

 

 

  • mch: 商户平台相关业务, 下单、支付、退款、查询、委托代扣、企业付款、企业红包 等
  • mp:小程序端相关业务, 小程序授权、用户数据解析、消息发送、二维码生成、消息 等
  • pub:公众号相关业务, 网页授权、菜单、模板消息、消息回复、用户管理、消息转客服 等
  • wechat.go 包的入口,获取以上三个业务的实例

一、支付

下单用法

import (
    "github.com/iiinsomnia/gochat"
    "github.com/iiinsomnia/gochat/mch"
)// UnifiedOrder 统一下单数据  直接引用包里的结构体即可
type UnifiedOrder struct {
	// 必填参数
	OutTradeNO     string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
	TotalFee       int    // 订单总金额,单位为分,详见支付金额
	SpbillCreateIP string // App和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
	TradeType      string // 取值如下:JSAPI,NATIVE,APP,MWEB,详细说明见参数规定
	Body           string // 商品或支付单简要描述
	NotifyURL      string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
	// 选填参数
	DeviceInfo string // 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
	Detail     string // 商品名称明细列表
	Attach     string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	FeeType    string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	TimeStart  string // 订单生成时间,格式为yyyyMMddHHmmss,如:2009年12月25日9点10分10秒 表示为:20091225091010
	TimeExpire string // 订单失效时间,格式为yyyyMMddHHmmss,如:2009年12月27日9点10分10秒 表示为:20091227091010
	GoodsTag   string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	ProductID  string // trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义
	LimitPay   string // no_credit--指定不能使用信用卡支付
	OpenID     string // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识
	Receipt    bool   // 是否在支付成功消息和支付详情页中出现开票入口,注:需要在微信支付商户平台或微信公众平台开通电子发票功能
	SceneInfo  string // 该字段用于上报支付的场景信息
}
// 初始化实例
wxmch := gochat.NewWXMch(appid, apikey, cert)
r, err := wxmch.Order().Unify(order)
if err != nil {
    // 错误处理...
}
if r["result_code"] != mch.ResultSuccess {
    // 判断微信的返回状态码,失败处理...
}
// 成功逻辑处理...
// 拿到预支付的id
prepayID := r["prepay_id"]
// 获取支付签名的票据,返回给前端和app就能拉取支付界面了
// APP
data := wxmch.APPAPI(prepayID)
// JS
data := wxmch.JSAPI(prepayID)

查询订单状态

// RefundData 退款数据
type RefundData struct {
	// 必填参数
	OutRefundNO string // 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
	TotalFee    int    // 订单总金额,单位为分,只能为整数,详见支付金额
	RefundFee   int    // 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
	// 选填参数
	RefundFeeType string // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	RefundDesc    string // 若商户传入,会在下发给用户的退款消息中体现退款原因
	RefundAccount string // 退款资金来源,仅针对老资金流商户使用
	NotifyURL     string // 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数
}
// 根据微信订单号查询
r, err := wxmch.Order().QueryByTransactionID(transactionID)
// 根据商户订单号查询
r, err := wxmch.Order().QueryByOutTradeNO(transactionID)
// 关闭订单
r, err := wxmch.Order().Close(outTradeNO)

退款

// 根据微信订单号退款
r, err := wxmch.Refund().RefundByTransactionID(transactionID, refundData)
if err != nil {
    // 错误处理...
}
if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}
// 成功逻辑处理...
// 根据商户订单号退款
r, err := wxmch.Refund().RefundByOutTradeNO(outTradeNO, refundData)
if err != nil {
    // 错误处理...
}
if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}
// 成功逻辑处理...

 

小程序

登录授权

import (
    "github.com/iiinsomnia/gochat"
    "github.com/iiinsomnia/gochat/mp"
    "github.com/iiinsomnia/gochat/utils"
)// 初始化小程序实例wxmp := gochat.NewWXMP(appid, appsecret)// 授权 session, err := wxmp.Sns().Code2Session(code)// 数据校验解密// 数据签名校验if signature != utils.SHA1(rawData+sessionKey) {
  return errors.New("签名校验失败")
}// 数据解密bizDataCrypt := wxmp.BizDataCrypt(encryptedData, sessionKey, iv)if err := bizDataCrypt.Decrypt(); err != nil {
  return err
}// 解密后取用户信息bizData, err := bizDataCrypt.GetUserData()if err != nil {
  return err
}

获取access_token

accessToken, err := wxmp.CgiBin().GetAccessToken()
if err != nil {
    return err
}// TODO: 存储 access_token ...

因 access_token 每日获取次数有限且含有效期,故服务端应妥善保存 access_token 并定时刷新

公众号

// 获取公众号实例
pub := gochat.NewWXPub(accountid, appid, appsecret, signToken, encodingAESKey)

 

整个包看下来还是蛮简单,使用方便。想要了解更多内容可以去查看作者的源码和使用说明。

地址: https://github.com/shenghui0779/gochat/wiki



Tags:WeChat类库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作为一个后端开发人员来说,微信开发已经是必备的技能之一了,今天小编就来分享一个相关的类库shenghui0779/gochat(以下简称wechat)。这个类库简单易用,看源码的时候目录结构一...【详细内容】
2020-08-31  Tags: WeChat类库  点击:(87)  评论:(0)  加入收藏
▌简易百科推荐
zip 是一种常见的归档格式,本文讲解 Go 如何操作 zip。首先看看 zip 文件是如何工作的。以一个小文件为例:(类 Unix 系统下)$ cat hello.textHello!执行 zip 命令进行归档:$ zip...【详细内容】
2021-12-17  Go语言中文网    Tags:Go语言   点击:(12)  评论:(0)  加入收藏
大家好,我是 polarisxu。前段时间,Russ Cox 明确了泛型相关的事情,原计划在标准库中加入泛型相关的包,改放到 golang.org/x/exp 下。目前,Go 泛型的主要设计者 ianlancetaylor 完...【详细内容】
2021-11-30  Go语言中文网    Tags:slices 包   点击:(24)  评论:(0)  加入收藏
前言最近因为项目需要写了一段时间的 Go ,相对于 Java 来说语法简单同时又有着一些 Python 之类的语法糖,让人大呼”真香“。 但现阶段相对来说还是 Python 写的多一些,偶尔还...【详细内容】
2021-11-25  crossoverJie    Tags:Go   点击:(29)  评论:(0)  加入收藏
go-micro是基于 Go 语言用于开发的微服务的 RPC 框架,主要功能如下:服务发现,负载均衡 ,消息编码,请求/响应,Async Messaging,可插拔接口,最后这个功能牛p安装步骤安装proto...【详细内容】
2021-09-06    石老师小跟班  Tags:go-micro   点击:(196)  评论:(0)  加入收藏
GoLand 2021.2 EAP 5 现已发布。用户可以从工具箱应用程序中获得 EAP 构建,也可以从官方网站手动下载。并且从此 EAP 开始,只有拥有有效的 JetBrains 帐户才能加入该计划。手...【详细内容】
2021-06-29  IT实战联盟  今日头条  Tags:GoLand   点击:(185)  评论:(0)  加入收藏
作者:HDT3213今天给大家带来的开源项目是 Godis:一个用 Go 语言实现的 Redis 服务器。支持: 5 种数据结构(string、list、hash、set、sortedset) 自动过期(TTL) 发布订阅、地理位...【详细内容】
2021-06-18  HelloGitHub  今日头条  Tags:Go   点击:(125)  评论:(0)  加入收藏
统一规范篇合理规划目录本篇主要描述了公司内部同事都必须遵守的一些开发规矩,如统一开发空间,既使用统一的开发工具来保证代码最后的格式的统一,开发中对文件和代码长度的控制...【详细内容】
2021-05-18  1024课堂    Tags:Go语言   点击:(232)  评论:(0)  加入收藏
闭包概述 闭包不是Go语言独有的概念,在很多编程语言中都有闭包 闭包就是解决局部变量不能被外部访问的一种解决方案 是把函数当作返回值的一种应用 代码演示总体思想:在函数...【详细内容】
2021-05-14  HelloGo  今日头条  Tags:Go语言   点击:(223)  评论:(0)  加入收藏
一时想不开,想了解一下Go语言,于是安装了并体验了一下。下载1. 进入golang.google.cn 点击Download Go 2.选择对应的操作系统,点击后开始下载。 安装1. windows下执行傻瓜式安...【详细内容】
2021-05-12  程序员fearlazy  fearlazy  Tags:Go语言   点击:(236)  评论:(0)  加入收藏
1.简介channel是Go语言的一大特性,基于channel有很多值得探讨的问题,如 channel为什么是并发安全的? 同步通道和异步通道有啥区别? 通道为何会阻塞协程? 使用通道导致阻塞的协程...【详细内容】
2021-05-10  程序员麻辣烫  今日头条  Tags:Go通道   点击:(272)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条