wxApi-go 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
wxApi-go 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
wxApi-go 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
wxApi-go 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
wxApi-go 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 Google Go
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 blusewang
适用人群 未知
收录时间 2020-10-23

软件简介

wxApi-go

针对golang设计的微信 Api 接口,涵盖公众号、小程序、App、商户。 支持下单、notify 验证、公对私打款至银行卡等

根据微信的业务特征,分为两部分:

  • 应用类账号下的Api
  • 商户类账号下的Api

安装

go get github.com/blusewang/wxApi-go

应用账号API

订阅号服务号小程序App

  •  支持连接不同的地区的微信服务器
  •  支持一行代码从被动消息的 http.Request 中安全取出消息成MessageData。内部实现了识别并解密消息、校验请求的Query数据。
  •  支持自动填充Query中的access_token数据。
  •  链式调用,让不同需求的业务能一气和成!

时效性凭证安置方式约定

access_tokenjs_sdk_ticket 这类需要每7200秒刷新一次的,放到crontab中。

核心设计

算法

一个基础账号对象MpAccount,它有三个行为:

  • 为微信H5的网址签名 UrlSign(url string)
  • 读取被动消息通知 ReadMessage(req *http.Request)
  • 主动发出请求 NewMpReq(path mp_api.MpApi) *mpReq

数据结构

只实现了很有限的数据。若需要使用本库自带的数据结构之外的API。完全可以参考本库的数据结构写法,自行另起书写(注意不同业务的tag名称不同)。 并能得到一样的兼容体验!

举例

	a := MpAccount{
		AppId:       "your_app_id",
		AccessToken: "38_XtyPcVUODHd8q3TNYPVGAZ2WNRx_nW4gnclObbv78tsEa1Y_bwdkLALDMEb4372wYqcC_CanjU9O0Zw4MqHiqxrIukk_G4ElAUxyv_ASOb0V2y8647cbxbYU-G8CbtnPdLNub8NrqtUVrSTnWAPaAGALPE",
        // ...
		ServerHost:  mp_api.ServerHostShangHai, // 选择离自己最近的服务主机
	}

    // 一个简单的只带access_token的GET API
	var list mp_api.MessageCustomServiceKfListRes
	if err := a.NewMpReq(mp_api.MessageCustomServiceKfList).Bind(&list).Do(); err != nil {
		t.Error(err)
	}
	log.Println(list)

    // 一个POST API
	var rs mp_api.AccountShortUrlRes
	err = a.NewMpReq(mp_api.AccountShortUrl).SendData(mp_api.AccountShortUrlData{
		Action:  mp_api.ShortUrlAction,
		LongUrl: "https://developers.weixin.qq.com/doc/offiaccount/Account_Management/URL_Shortener.html",
	}).Bind(&rs).Do()
	if err != nil {
		t.Error(err)
	}
	log.Println(rs)

    // 一个上传媒体文件的API
	err = a.NewMpReq(mp_api.MessageCustomServiceKfAccountUploadHeadImg).Query(mp_api.MessageCustomServiceKfAccountUploadHeadImgQuery{
		KfAccount: "1@1",
	}).Upload(resp.Body, "png")
	if err != nil {
		t.Error(err)
	}

商户账号API(V2版)

App、JSAPI、小程序下单 分账 付款至微信零钱 付款至个人银行卡 发红包

  •  自动填充基础信息
  •  自动签名
  •  私有证书HTTP客户端自动缓存
  •  支持MD5HMAC-SHA256加密
  •  支持付款至银行卡时,隐私信息加密

核心设计

算法

一个基础账号对象MchAccount,它有以下行为:

  • 创建请求 NewMchReq(url string)
  • 将订单签名给App OrderSign4App(or mch_api.PayUnifiedOrderRes)
  • 将订单签名给于H5、小程序 OrderSign(or mch_api.PayUnifiedOrderRes)
  • 验证支付成功通知 PayNotify(pn mch_api.PayNotify)
  • 付款至银行卡时,隐私信息项加密 RsaEncrypt(plain string)

数据结构

只实现了很有限的数据。若需要使用本库自带的数据结构之外的API。完全可以参考本库的数据结构写法,自行另起书写(建议参考structs.go中的方式书写)。 能得到一样的兼容体验!

举例

    mch := MchAccount{}
    
	var data mch_api.PayProfitSharingRes
	var body = mch_api.PayProfitSharingData{
		TransactionId: "4200000531202004307536721907",
		OutOrderNo:    "TSF_216144_1065_ye7DvHdSed",
	}
	_ = body.SerReceivers([]mch_api.PayProfitSharingReceiver{
		{
			Type:        "",
			Account:     "",
			Amount:      10,
			Description: "",
		},
	})

	err := mch.NewMchReq(mch_api.PayProfitSharing).
		Send(&body). // 注意:发送的数据需传指针,以便自动填充基础信息和签名
		UseHMacSign(). // 指定使用HMAC-SHA256
		UsePrivateCert(). // 指定使用私有证书通信
		Bind(&data).Do() // 传指针
	log.Println(err)
	log.Println(data)

为微信业务数据提供的额外工具方法

  • NewRandStr 生成符合微信要求随机字符
  • LimitString 限制长度,并将微信不支持的字符替换成'x',能满足公众号App的字符要求
  • SafeString 安全地限制长度,并将微信不支持的字符替换成'x',能满足商户平台的字符要求
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2015/02/11 10:51

Android微信登陆

前言 分享到微信朋友圈的功能早已经有了,但微信登录推出并不久,文档写的也并不是很清楚,这里记录分享一下。 正文 一、准备 注册、认证步骤自己来。微信开放平台:https://open.weixin.qq.com 二、 代码 2.1唤起微信登录 参考官网文档:资源中心/移动应用开放/接入指南/Android接入指南 private IWXAPI mWeixinAPI; private void loginWithWeixin() { if (mWeixinAPI == null) { mWeixinAPI = WXAPIFactory.createWXAPI(this...

1
1
发表了博客
2019/01/31 17:01

net core appsetting配置

public class BaseController : Controller { protected WLEntity _db; protected ILogger _log; protected MemoryCache _mcache; protected IConfiguration _config; protected WxApi _wxapi; public override void OnActionExecuting(ActionExecutingContext context) { _db = (WLEntity)HttpContext.RequestServices.GetService(typeof(WLEntity)); _log = (ILogger)HttpContext.RequestServices.GetService(typeof(ILogger<...

0
0
发表了博客
2015/09/07 11:52

SAE Token验证失败的解决方法

问题描述:填写完URL地址、Token、EncodingAESKey、消息加解密方式为兼容模式后确认显示Token验证失败。 解决方法: 1 下载官方提供的zip(http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip) 2 解压缩后重命名为wxapi.php并压缩为wxapi.zip 3 SAE代码管理模块中操作并上传代码包(wxapi.zip) 4 修改SAE服务器中wxapi.php代码token值为自己需要的token并上传 5 在微信公众平台的开发者中心修改配置,填写URL和Tok...

0
0
发表了博客
2018/11/23 13:50

记一次nginx php配置的心路历程

1.本来搞好了php的配置,想把目录下移一层 从 www.abc.com 变成 www.abc.com/wxapi ,由于我的真实文件目录比路由少了一层public 尝试了很多办法都不行 甚至想到了upstream+proxy_pass 但由于是内部转发会导致获取request url路径出问题。 例如我的路径是 www.abc.com/wxapi 想获取 /wxapi/public/index.php 用nginx各种正则也无法匹配对。因为$fastcgi_script_name 这里直接就是/wxapi/info.php,不能在中间硬插一个路径 在将近...

0
0
发表了博客
2019/06/22 15:23

WXApiImplV10.activityCb内存泄漏处理

集成了LeakCanary对APP进行内存泄漏监控后,发现有一个WXApiImplV10.activityCb这样的日志,是在登录页面发生的。 ![image.png](https://upload-images.jianshu.io/upload_images/2476783-9538c2d25096d4b1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 产生的原因 在发生此种问题的地方,你一定可以找到这样的代码,而且你对IWXAPI并不陌生。是的,这是微信的sdk。 ```` IWXAPI wxapi = WXAPIFactory.createWXA...

0
0
发表了博客
2016/01/04 16:13

android集成微信支付(全是坑)

android集成微信支付(全是坑) 一. 微信开发步骤: 1.注册registerApp 2.获取token 3.获取prepayid 4.调用sendReq 二. 服务端签名,安卓客户端具体操作如下: 1.把Constants.java,MD5.java,PayActivity.jav,util.java拷贝到项目下,复制wxapi/WXPayEntryActivity.java到项目下; 2.修改微信开放平台中后台的包名和签名,可以用腾讯开放平台的签名工具获取签名Gen_Signature_Android.apk (1)AndroidManifest.xml中package名字...

0
5
发表了博客
2016/11/22 12:15

HotApp小程序统计云后台 免费的Https云后台服务器

小程序学习有些地方需要后台,比如需要存储数据到服务器,比如微信登录。 hotapp有免费的小程序云后台 包含基本的 新增,查询,修改,删除 操作,方便于学习,而且不需要微信appid 也可使用。 小程序微信手机调试appid,简单解决办法:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=495 免费云后台申请网址 https://weixin.hotapp.cn/, 注册就可以免费试用 request 合法域名为 https://wxapi.hotapp.cn/ 接口文档 ...

0
0
发表了博客
2015/08/12 11:27

iOS 第三方登陆避免被APP STORE拒

iOS调用第三方登陆,如果用户没有安装第三方软件的时候,应该采取将第三方登陆按钮隐藏掉得办法实现。 微信:if ([WXApi isWXAppInstalled] && [WXApi isWXAppSupportApi]) QQ:[TencentOAuth iphoneQQInstalled] 如果强制跳转到安装下载页面有可能被拒!

0
3
发表于大前端专区
2015/10/09 10:35

IOS9 微信支付报 prepayid 获取失败 ErrorDomainSSL, -9802

微信支付或访问一些网站时报错: SDKSample[669:19724] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 原因是 : IOS9 中将 http 请求改成了 HTTPS(加密) 的方式 解决: 在项目的info.plist 文件里加上如下节点: NSAppTransportSecurity - NSAllowsArbitraryLoads 这个子节点的意思是:是否允许任性的加载? 设为 YES 的话就将禁用了 AppTransportSecurity 转而使用用户自定义的设置。 当 ...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
8 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部