微信开发

    xiaoxiao2026-08-17  0

    微信订阅号、服务号的介绍(区别) 订阅号 主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息; 服务号 主要偏于服务交互(类似银行,114,提供服务查询),认证前后都是每个月可群发4条消息; 温馨提示: 1、如果想简单的发送消息,达到宣传效果,建议可选择订阅号; 2、如果想进行商品销售,进行商品售卖,建议可申请服务号; 3、订阅号无法升级为服务号。若需要服务号,需注册服务号使用。 订阅号功能:消息显示在”订阅号”文件夹中,每天可群发1条消息,基本的消息接收/回复接口,聊天假面底部,自定义菜单 服务号功能:消息直接显示在好友对话列表中,每月可群发4条消息,基本的消息接收/回复接口,聊天界面底部、自定义餐单,九大高级接口,可申请开通微信支付

    微信公众号开发 微信公众平台开发者文档 http://mp.weixin.qq.com/wiki/home/index.html 首先要将其更改为开发者模式 接入指南 http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html 【注意】每个用户针对每个公众号会产生一个安全的OpenID 1、公众号消息会话 1)群发消息:公众号可以以一定频次(订阅号为每天1次,服务号为每月4次),向用户群发消息,包括文字消息、图文消息、图片、视频、语音等。 2)被动回复消息:在用户给公众号发消息后,微信服务器会将消息发到开发者预先在开发者中心设置的服务器地址(开发者需要进行消息真实性验证),公众号可以在5秒内做出回复,可以回复一个消息,也可以回复命令告诉微信服务器这条消息暂不回复。被动回复消息可以设置加密(在公众平台官网的开发者中心处设置,设置后,按照消息加解密文档来进行处理。其他3种消息的调用因为是API调用而不是对请求的返回,所以不需要加解密)。 3)客服消息:在用户给公众号发消息后的48小时内,公众号可以给用户发送不限数量的消息,主要用于客服场景。用户的行为会触发事件推送,某些事件推送是支持公众号据此发送客服消息的,详见微信推送消息与事件说明文档。 4)模板消息:在需要对用户发送服务通知(如刷卡提醒、服务预约成功通知等)时,公众号可以用特定内容模板,主动向用户发送消息。 开发流程: 填写服务器配置 | 验证服务器地址有效性 | 依据接口文档实现业务逻辑 ---> 用户发送消息,事件推送等用户端主动行为,请参考 http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html | |---> 公众号管理,如自定义菜单,素材管理等后台主动行为 -> 获取access_token http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html -> 根据access_token和文档进行开发 第一步:填写服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。 同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。 第二步:验证服务器地址的有效性 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数: 参数 描述 signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 timestamp 时间戳 nonce 随机数 echostr 随机字符串 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。 加密/校验流程如下: 1. 将token、timestamp、nonce三个参数进行字典序排序 2. 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 检验signature的PHP示例代码: private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } 下载链接地址 http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.20140819.zip 第三步:依据接口文档实现业务逻辑 简介: 验证URL有效性成功后即接入生效,成为开发者。如果公众号类型为服务号(订阅号只能使用普通消息接口),可以在公众平台网站中申请认证,认证成功的服务号将获得众多接口权限,以满足开发者需求。 此后用户每次向公众号发送消息、或者产生自定义菜单点击事件时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,然后开发者可以依据自身业务逻辑进行响应,例如回复消息等。 公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。返回错误时,可根据返回码来查询错误原因。全局返回码说明 用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。 此外,由于开发者经常有需在多个平台(移动应用、网站、公众帐号)之间共通用户帐号,统一帐号体系的需求,微信开放平台(open.weixin.qq.com)提供了UnionID机制。开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个应用(移动应用、网站应用和公众帐号,公众帐号只有在被绑定到微信开放平台帐号下后,才会获取UnionID),可通过获取用户基本信息中的UnionID来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的UnionID是唯一的。换句话说,同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。详情请在微信开放平台的资源中心-移动应用开发-微信登录-授权关系接口调用指引-获取用户个人信息(UnionID机制)中查看。 首先:获取access_token http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html access_token是公众号的全局唯一票据,公众号调用个接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。 公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发者中心页中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议。 http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 参数 是否必须 说明 grant_type 是 获取access_token填写client_credential appid 是 第三方用户唯一凭证 secret 是 第三方用户唯一凭证密钥,即appsecret 返回说明 正常情况下,微信会返回下述JSON数据包给公众号: {"access_token":"ACCESS_TOKEN","expires_in":7200} 参数 说明 access_token 获取到的凭证 expires_in 凭证有效时间,单位:秒 其次:当获取到access_token之后, 可以 自定义菜单 http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html 消息管理 http://mp.weixin.qq.com/wiki/8/806878e1fc2b9e9aa618ae33896b04c4.html 素材管理 http://mp.weixin.qq.com/wiki/15/2d353966323806a202cd2deaafe8e557.html 用户管理 http://mp.weixin.qq.com/wiki/8/d6d33cf60bce2a2e4fb10a21be9591b8.html 账号管理 http://mp.weixin.qq.com/wiki/18/167e7d94df85d8389df6c94a7a8f78ba.html 数据统计 http://mp.weixin.qq.com/wiki/15/88726a421bfc54654a3095821c3ca3bb.html 微信智能接口 http://mp.weixin.qq.com/wiki/10/65eb7a43f078cc609cf08dae6805f4a6.html 等等 。。。 2、微信网页开发 微信网页授权 http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 关于网页授权回调域名的说明 1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的开发者中心页配置授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头; 2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权 3、如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可 总结:【重要】 【先到公众平台官网中的开发者中心页配置授权回调域名。如:www.qq.com 切记没有http://】 【当授权回调域名为www.qq.com时,则表示http://www.qq.com/test.html、http://www.qq.com/aa.html可以进行OAuth2.0授权 但http://pay.qq.com不可以】 关于网页授权的两种scope的区别说明 1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面) 2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。 3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。 总结:【重要】 【scope=snsapi_base 获取用户openid 静默授权切自动跳转到回调页 用户感觉就是直接进入了回调页 如果用户没有关注该微信公众号 则无法获取用户基本信息】 关于特殊场景下的静默授权 1、上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知; 2、对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。 关于网页授权access_token和普通access_token的区别 1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息; 2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。 关于UnionID机制 1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。 2、UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。 具体而言,网页授权流程分为四步: 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) 微信网页开发样式库 http://mp.weixin.qq.com/wiki/2/ae9782fb42e47ad79eb7b361c2149d16.html 微信JS-SDK http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html 作用: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验 JSSDK使用步骤: 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。如果你使用了支付类接口,请确保支付目录在该安全域名下,否则将无法完成支付 步骤二:引入JS文件 步骤三:通过config接口注入权限验证配置 所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。 wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名,见附录1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); 【重要】 如何生成签名: 第一步:获取access_token http://mp.weixin.qq.com/wiki/15/54ce45d8d30b6bf6758f68d2e95bc627.html 第二步: 获取js_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。 用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi 成功返回如下JSON: { "errcode":0, "errmsg":"ok", "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA", "expires_in":7200 } 获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。 第三步: 签名生成规则如下:参与签名的字段包括noncestr(随机字符串),有效的jsapi_ticket,timestamp(时间戳),url(当前网页的URL,不包含#及其后面部分)。对所有带签名参数按照字段名的ASCII码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value..)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符,对string1作sha1加密,字段名和字段值都采用原始值,不进行URL转义 即signature=sha1(string1)。 示例: noncestr=Wm3WZYTPz0wzccnW jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg timestamp=1414587457 url=http://mp.weixin.qq.com?params=value 步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1: jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value 步骤2. 对string1进行sha1签名,得到signature: 0f9de62fce790f9a083d5c99e95740ceb90c27ed 注意事项 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。 签名用的url必须是调用JS接口页面的完整URL。 出于安全考虑,开发者必须在服务器端实现签名的逻辑。 步骤四:通过ready接口处理成功验证 wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 }); 步骤五:通过error接口处理失败验证 wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); 接口调用说明 所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数: success:接口调用成功时执行的回调函数。 fail:接口调用失败时执行的回调函数。 complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。 cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。 trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。 备注:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。 以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下: 调用成功时:"xxx:ok" ,其中xxx为调用的接口名 用户取消时:"xxx:cancel",其中xxx为调用的接口名 调用失败时:其值为具体错误信息 步骤五:开发逻辑

    【注意】 微信js sdk 报错 config:invalid signature 一般都是js安全域名没有设置正确 js安全域名位置 公众号设置->功能设置->JS接口安全域名

    微信支付 https://pay.weixin.qq.com/wiki/doc/api/index.html 公众号支付(只有服务号存在H5支付) https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 公众号设置 并 获取的固定参数 进入“公众号设置”的“功能设置”里填写“JS接口安全域名” 如:http://www.test.com -> 设置网页授权回调域名:进入微信公众平台后台,找到开发者中心,修改网页授权获取用户信息,切记不用添加http:// -> 修改微信支付授权目录,进入微信公众平台后台,找到微信支付-开发者配置,勾选JS API网页支付,然后添加系统后台的授权目录 AppID,appsecret => 进入微信公众平台后台,进入开发者中心,点击完整显示应用密钥,然后复制ID和密钥 MCHID【商户号】 => 在微信支付审核通过邮件 KEY 设置微信支付API密钥,登录微信支付商户平台:https://mch.weixin.qq.com,找到账户设置-密码安全,点击设置密钥(要先安装证书),然后复制系统后台生成的API密钥到这里就可以 业务流程 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4 【重要】

    微信H5端能够发起支付请求流程: 获取access_token【服务器】 -> 获取jsapi_ticket【服务器】 -> 生成签名(sign)【服务器】 -> 通过config接口注入权限验证配置 -> 发起一个微信支付请求 -> 提示输入密码 -> 跳转回商户H5页面 -> 商户自定义查询 发起一个微信支付请求 wx.chooseWXPay({ timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: '', // 支付签名随机串,不长于 32 位 package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) 暂不知道要不要加) signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: '', // 支付签名 success: function (res) { // 支付成功后的回调函数 } }); 备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。 请注意该接口只能在你配置的支付目录下调用,同时需确保支付目录在JS接口安全域名下。 服务器端 获取prepay_id,即调用统一下单接口 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1,要获取openid,请参照微信网页授权 将接口调用时所使用的sign,签名随机串,和获取到的prepay_id,放到x.chooseWXPay对应参数中 APP支付(微信开放平台) https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1 业务流程 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3 商户系统和微信支付系统主要交互说明: 1、用户在商户APP中选择商品,提交订单,选择微信支付 2、商户后台收到用户支付订单,调用微信支付统一下单接口。参见【统一下单API】 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 3、统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepay_id,noncestr,timestamp,package,sign。注意package的值格式Sign=WXPay 4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 5:商户后台接收支付通知。api参见【支付结果通知API】 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7

    6:商户后台查询支付结果。,api参见【查询订单API】 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_2

    微信开放平台 https://open.weixin.qq.com/ 网站应用开发:主要是使用微信账号来登录 移动应用开发:让App支持微信分享、微信收藏和微信支付等功能。

    转载请注明原文地址: https://ju.6miu.com/read-1311261.html
    最新回复(0)