微信开放平台Android常见问题

本文详细解析了微信开放平台接口在不同版本微信客户端上的支持情况,包括发送信息、接收信息、分享到朋友圈等功能。同时解答了关于SDK分享信息给微信好友时可能出现的消息发送失败问题,涉及缩略图大小限制、title、description参数大小限制以及签名验证等问题。此外,还介绍了应用审核通过与否对调试的影响,以及初次调试失败的原因和解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间研究第三方软件调用微信分享问题,遇到不少问题,现将问题及官方回答汇总。


不同微信版本对开放平台接口的支持(New)
发送信息:4.0以上版本微信iPhone、Android客户端;
接收/查看信息:4.0以上版本微信iPhone、Android、Sybiam 客户端;
发送到朋友圈:4.2以上版本微信iPhone、Android客户端。


Q:为什么使用微信SDK分享信息给微信好友,有的消息发送成功,有的消息发送失败(打不开微信)?(New)
A:这是因为SDK协议中对缩略图的大小作了限制,大小不能超过32K。另外限制的还有title、description等参数的大小。iOS开发者请在微信开放平台网站iOS手册搜索“thumbData”, Android开发者请见微信开放平台网站Android手册的“WXMediaMessage”页面。


Q:应用没有审核通过能不能进行调试?
A:iOS应用只要申请并获取到AppID就可进行调试。Android应用除了获取AppID外,应用还要通过审核,否则无法调起微信进行分享,并且需要在网站上填写包名和签名两个字段,签名可使用签名生成工具获取。如有特殊需要,请自行参见《Signature的生成方法》生成。


Q:为什么用网上下载的SDK Demo工程直接运行到设备上,一开始可以正常调试,后面就不可以?
A:这里是由于身份校验失败造成的,要运行SDK Demo工程,可以参考文档《如何运行SDK Demo工程》,同时请下载更新最新版的SDK Sample。


        注意:Android端的应用必须要通过审核才可正常使用。审核页面应用签名用微信提供的签名生成工具获取。下载地址随便填写,由于当时微信这边没有通过审核就没有办法测试这一部分功能,遂导致没有可用版本发布到应用商店,于是本人直接填写了百度的首页,三日后通过审核才开始调试微信的功能。
        app无法正常分享,首先检查appid,keystore,包名,和通过审核的是否一致。本人第一次调试了一整天也没有成功,最后才知道需要通过审核才可以正常调试。app一开始能正常调试分享,分享成功一两次后就不能分享了一般也是由于审核问题。下面是微信开放平台官方微博给出的答复:


不少Andrioid开发者在反映第一次或才前几次可以分享,过一段时间就不能再分享的问题,这个要说明一下:前几次可以分享是因为微信客户端在未与客户端通信时默认新接入的app合法,但一旦拉取到信息,发现签名不合法,就会发送不成功。所以这类问题基本都是签名的问题,请大家注意查验。


希望本文能帮助到刚开始接触微信开放平台的程序员们。
### 实现微信登录功能的方法与步骤 #### 一、准备工作 在开始实现微信登录功能之前,需要完成以下准备工作: 1. **注册微信开放平台账号** 在 [微信开放平台](https://open.weixin.qq.com/) 注册一个开发者账号,并完成相关认证。 2. **创建应用** 在开放平台中创建一个网站应用或移动应用,并获取 `AppID` 和 `AppSecret`,这两个参数是后续接口调用的关键凭证。 3. **配置授权域名** 在应用管理页面中配置授权回调域名,确保域名与实际使用的域名一致。域名必须经过 ICP 备案,并且不支持 IP 地址或 localhost。 #### 二、网站应用微信登录流程 微信登录网站应用的流程主要分为以下几个步骤: 1. **用户点击微信登录按钮** 用户点击登录按钮后,跳转到微信的授权页面。跳转链接如下: ``` https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect ``` 其中 `APPID` 是应用的唯一标识,`REDIRECT_URI` 是授权回调地址,`SCOPE` 表示授权作用域(推荐使用 `snsapi_login`),`STATE` 是用于防止 CSRF 攻击的随机字符串[^1]。 2. **用户扫码授权** 用户通过微信客户扫码后,确认授权登录。微信服务器会重定向到指定的 `REDIRECT_URI`,并附带 `code` 和 `state` 参数。 3. **获取授权访问令牌** 通过 `code` 向微信服务器请求访问令牌,调用接口如下: ``` https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code ``` 成功后会返回 `access_token` 和 `openid`,其中 `openid` 是用户的唯一标识。 4. **获取用户信息** 使用 `access_token` 和 `openid` 调用以下接口获取用户的基本信息: ``` https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID ``` 接口返回用户昵称、头像、性别等信息。 5. **登录或注册用户** 根据获取到的 `openid` 和用户信息,在网站系统中完成登录或注册流程。 #### 三、VUE中实现微信登录 在 VUE 项目中,可以通过定义 JS 对象的方式实现微信登录功能: 1. **引入微信 SDK** 在页面中引入微信的 SDK: ```html <script src="https://res2.wx.qq.com/connect/oauth2/authorize"></script> ``` 2. **定义 JS 对象并生成二维码** 通过 JS 对象生成二维码,并绑定回调事件: ```javascript const wxLogin = new WxLogin({ id: "login_container", // 二维码容器 ID appid: "YOUR_APPID", scope: "snsapi_login", redirect_uri: "YOUR_REDIRECT_URI", state: "STATE", style: "black", href: "STYLE_CSS_URL" // 自定义样式文件 }); ``` 3. **处理授权回调** 在回调页面中获取 `code` 参数,并通过后接口获取用户信息,完成登录流程。 #### 四、移动应用微信登录流程 对于 AndroidiOS 应用,微信提供了原生的登录 SDK,实现流程如下: 1. **集成微信 SDK** 下载并集成微信的 SDK 到项目中,按照官方文档配置 `AppID`。 2. **注册微信应用** 在 `AndroidManifest.xml` 中注册微信应用,并添加权限声明: ```xml <activity android:name=".wxapi.WXEntryActivity" android:exported="true" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> ``` 3. **调用登录接口** 调用微信登录接口,请求授权: ```java IWXAPI api = WXAPIFactory.createWXAPI(context, "YOUR_APPID"); api.registerApp("YOUR_APPID"); SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "STATE"; api.sendReq(req); ``` 4. **接收授权结果** 在 `WXEntryActivity` 中接收授权结果,获取 `code` 并通过接口获取 `access_token` 和用户信息。 5. **完成登录** 根据用户信息完成登录或注册流程。 #### 五、常见问题调试 1. **本地调试问题** 本地开发环境无法直接使用线上域名,可以使用内网穿透工具(如 ngrok)将本地服务暴露到公网。 2. **授权域名配置错误** 如果域名未正确配置,会导致授权失败。请确保域名已备案,并且与配置的域名完全一致。 3. **Token 过期问题** `access_token` 通常具有较短的有效期(如 7200 秒),需要定期刷新或重新获取。 4. **用户取消授权** 如果用户取消扫码或授权,微信会重定向到 `redirect_uri` 并附带 `errcode=48001` 等错误码,需进行相应处理。 #### 六、代码示例 以下是一个简单的 PHP 获取用户信息的示例: ```php <?php header("Content-type: text/html; charset=utf-8"); define('APPID', "wx3f05f4b79761d123"); define('APPSECRET', "9acc222b92afb29cff90b9bcfc7d6080"); $code = $_GET['code']; // 获取 access_token $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . APPID . "&secret=" . APPSECRET . "&code=" . $code . "&grant_type=authorization_code"; $response = file_get_contents($url); $data = json_decode($response, true); // 获取用户信息 $userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $data['access_token'] . "&openid=" . $data['openid']; $userInfo = json_decode(file_get_contents($userInfoUrl), true); var_dump($userInfo); ?> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值