channels

package module
v1.1.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 14, 2024 License: Apache-2.0 Imports: 3 Imported by: 0

README

微信视频号 GO SDK

官方接口文档

Go语言实现微信视频号sdk(自建应用维度),集成了视频号小店和视频号橱窗的功能,使用简单,扩展灵活

  • 支持一键生成sdk代码,包括api和回调事件
  • 用缓存方案实现分布式 access_token,保证在多个服务中只有一个服务能成功调用API请求 access_token,减少API调用次数和服务重启需要重新获取的情况
    • 缓存方案支持自定义存储,默认内存存储
  • 支持自定义日志存储,提供Logger interface:用于自行实现日志记录器,便于收集日志
    • 默认 log.Printf 输出

点击查看视频号的开发博文

安装命令

go get github.com/zsmhub/wx-channels-sdk

一键生成sdk代码命令(需手动格式化代码

  • 生成视频号回调事件代码

    make callback doc=文档链接
    
    # example
    make callback doc=https://developers.weixin.qq.com/doc/channels/API/product/callback/ProductSpuListing.html
    
  • 生成视频号api代码

    make api doc=文档链接 [prefix=生成文件名前缀]
    
    # example
    make api doc=https://developers.weixin.qq.com/doc/channels/API/product/get.html prefix=商品
    

    tip:

    1. Get 方式的接口量少没做兼容,请求参数需手动整理到 Req 结构体,Post 则不用
    2. 部分接口文档的请求/响应 json 示例,如果缺少部分字段,需手动补上
    3. 部分复杂的页面需要手动整理下sdk

sdk调用示例

强烈建议去 ./demo 文件夹查看完整示例!

点击查看完整demo

回调事件sdk调用示例
// 回调事件初始化
func (callbackRepo) InitCallbackHandler() error {
	// 视频号小店回调事件解析
	if err := channels.Sdk.NewShopCallbackHandler(ShopCallbackToken, ShopCallbackEncodingAESKey); err != nil {
		return err
	}

	// 视频号橱窗回调事件解析
	if err := channels.Sdk.NewWindowCallbackHandler(WindowCallbackToken, WindowCallbackEncodingAESKey); err != nil {
	   return err
	}

	return nil
}

// 视频号小店-解析并获取回调信息
msg, err := channels.Sdk.ShopCallback.GetCallbackMsg(c.Request())

// 视频号橱窗-解析并获取回调信息
msg, err := channels.Sdk.WindowCallback.GetCallbackMsg(c.Request())


// 视频号小店-处理回调事件完整示例
func (callbackRepo) HandleShopPostReqShouest(c echo.Context) error {
	msg, err := channels.Sdk.ShopCallback.GetCallbackMsg(c.Request())
	if err != nil {
		return err
	}

	go func() {
		defer func() {
			_ = recover()
		}()

		switch msg.MsgType {

		case callbacks.MessageTypeEvent:
			switch msg.EventType {

			case callbacks.EventTypeProductSpuAudit:
				extras, ok := msg.Extras.(callbacks.EventProductSpuAudit)
				if !ok {
					fmt.Println("获取商品审核回调参数失败")
					return
				}
				fmt.Printf("接收到商品审核事件的原始内容:%s\n", msg.OriginalMessage)
				fmt.Printf("解析商品审核事件的结构体:%+v\n", extras)
			}

		}
	}()

	return nil
}
api sdk 调用示例
// API客户端初始化
func initApiHandler() error {
	// 初始化sdk参数
	channels.Sdk.InitOptions(apis.Options{
		DcsToken: DcsTokenByRedis{},
		Logger:   Logger{},
	})

	// 视频号小店API客户端初始化
	channels.Sdk.NewShopApiClient(ShopAppId, ShopAppSecret)

	// 视频号橱窗API客户端初始化
	channels.Sdk.NewWindowApiClient(WindowAppId, WindowAppSecret)

	return nil
}

// 获取 access_token
resp, err := channels.Sdk.ShopClient.GetToken()

// 获取店铺信息
resp, err := channels.Sdk.ShopClient.ExecEcBasicsInfoGet(apis.ReqEcBasicsInfoGet{})

// error code 类型强制转换
if err != nil {
	if apiError, ok := err.(*apis.ClientError); ok {
		if apiError.Code == apis.ErrCode40013 {
			return errors.New("不合法的 AppID")
	 	}
	}
	return nil, err
}

目录结构

.
├── apis                     视频号API
│   └── api.error.go         全局错误码
├── callbacks                视频号回调事件
│   └── callback_constant.go 回调事件常量定义
├── demo                     sdk调用示例
├── generate                 一键生成脚本
│   ├── api.go               一键生成视频号API脚本
│   └── callback.go          一键生成企微回调事件脚本
├── internal                 消息加解密库
├── constant.go              全局枚举值定义
└── sdk.go                   入口文件

注意点

  • 如果你发现了sdk中,没有某个回调事件或某个api,可以使用一键生成sdk代码命令生成,然后提交下pr
  • 注意视频号access_token不支持互刷,获取了新的access_token,旧的access_token就会很快失效

推荐开源项目

Documentation

Index

Constants

View Source
const (
	OrderStatusNoPay          int = 10  // 待付款
	OrderStatusStocking       int = 20  // 待发货
	OrderStatusPartSend       int = 21  // 部分发货
	OrderStatusSend           int = 30  // 已发货
	OrderStatusAfsCancel      int = 200 // 全部商品售后之后,订单取消
	OrderStatusCustomerCancel int = 250 // 未付款用户主动取消或超时未付款订单自动取消
	OrderStatusFinish         int = 100 // 完成
)

订单状态

View Source
const (
	AfsTypeRefund = "REFUND" // 退款
	AfsTypeReturn = "RETURN" // 退货退款
)

售后类型

View Source
const (
	AfterSaleStatusUserCanceld             = "USER_CANCELD"               // 用户取消申请
	AfterSaleStatusMerchantProcessing      = "MERCHANT_PROCESSING"        // 商家受理中
	AfterSaleStatusMerchantRejectRefund    = "MERCHANT_REJECT_REFUND"     // 商家拒绝退款
	AfterSaleStatusMerchantRejectReturn    = "MERCHANT_REJECT_RETURN"     // 商家拒绝退货退款
	AfterSaleStatusUserWaitReturn          = "USER_WAIT_RETURN"           // 待买家退货
	AfterSaleStatusReturnClosed            = "RETURN_CLOSED"              // 退货退款关闭
	AfterSaleStatusMerchantWaitReceipt     = "MERCHANT_WAIT_RECEIPT"      // 待商家收货
	AfterSaleStatusMerchantOverdueRefund   = "MERCHANT_OVERDUE_REFUND"    // 商家逾期未退款
	AfterSaleStatusMerchantRefundSuccess   = "MERCHANT_REFUND_SUCCESS"    // 退款完成
	AfterSaleStatusMerchantReturnSuccess   = "MERCHANT_RETURN_SUCCESS"    // 退货退款完成
	AfterSaleStatusPlatformRefunding       = "PLATFORM_REFUNDING"         // 平台退款中
	AfterSaleStatusPlatformRefundFail      = "PLATFORM_REFUND_FAIL"       // 平台退款失败
	AfterSaleStatusUserWaitConfirm         = "USER_WAIT_CONFIRM"          // 待用户确认
	AfterSaleStatusMerchantRefundRetryFail = "MERCHANT_REFUND_RETRY_FAIL" // 商家打款失败,客服关闭售后
	AfterSaleStatusMerchantFail            = "MERCHANT_FAIL"              // 售后关闭
)

售后状态

View Source
const (
	DeliverTypeSelf    int = 1 // 自寄快递发货
	DeliverTypeVirtual int = 3 // 虚拟商品无需物流发货
)

发货方式

Variables

View Source
var Sdk = &sdk{}

微信视频号 sdk 调用入口

Functions

This section is empty.

Types

This section is empty.

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL