WeChat パブリック プラットフォームは最近、WeChat ミニ プログラム (WeChat パブリック アカウント) 機能の内部テストを静かに開始し、無数の開発者と一般ユーザーの注目を集めています。WeChat での支払い機能は、ミニ プログラムのリリースとともに開始されました。機能は次のように紹介されます。
wx.login(オブジェクト)
インターフェイスを呼び出してログイン資格情報 (コード) を取得し、ユーザーの一意の識別子 (openid) やこのログインのセッション キー (session_key) などのユーザー ログイン ステータス情報を交換します。ユーザーデータ通信の暗号化と復号化はセッションキーに依存します。
OBJECT パラメータの説明:
サンプルコード:
リーリーこれは HTTP インターフェイスであり、開発者サーバーはログイン資格情報コードを使用して session_key と openid を取得します。ここで、 session_key は、ユーザー データの暗号化と署名に使用されるキーです。アプリケーションのセキュリティのため、session_key はネットワーク経由で送信しないでください。
インターフェースアドレス:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
リクエストパラメータ:
戻りパラメータ:
返品手順:
リーリー
ログイン状態のメンテナンス
wx.login()でユーザーのログイン状態を取得した後は、ログイン状態を維持する必要があります。開発者は、session_key や openid などのフィールドをユーザー識別子またはセッション識別子として直接使用しないように注意し、代わりにセッション ログイン ステータスを自分でディスパッチする必要があります (ログイン シーケンス図を参照してください)。開発者自身が生成したセッションの場合、セキュリティを確保し、長い有効期限を設定すべきではありません。セッションがミニ プログラム クライアントにディスパッチされた後、後続の通信のためにストレージに保存できます。
ログインシーケンス図
wx.checkSession(OBJECT)
ログインステータスの有効期限が切れていないか確認する
サンプルコード:
リーリー
ユーザーデータの署名検証と暗号化および復号化
データ署名の検証
オープン インターフェイスから返されるユーザー データのセキュリティを確保するために、WeChat はプレーン テキスト データに署名します。開発者は、ビジネス ニーズに基づいてデータ パケットの署名検証を実行し、データの整合性を確保できます。
署名検証アルゴリズムにはユーザーの session_key が含まれます。ユーザーの session_key は、wx.login ログイン プロセスを通じて取得され、アプリケーション自体のログイン状態との対応関係が維持されます。
インターフェイス (wx.getUserInfo など) を呼び出してデータを取得すると、インターフェイスは rawData と署名を同時に返します。ここで、signature = sha1(rawData + session_key)
開発者は検証のために署名と rawData を開発者サーバーに送信します。サーバーは、ユーザーの対応する session_key を使用して、同じアルゴリズムを使用して署名 Signature2 を計算し、signature と Signature2 を比較してデータの整合性を検証します。
wx.getUserInfo のデータ検証など:
インターフェイスによって返される rawData:
リーリー
ユーザーのセッションキー:
HyVFkGl5F5OQWJZZaNzBBg==
したがって、署名に使用される文字列は次のようになります。
リーリー
sha1 を使用して得られた結果は次のとおりです。
75e81ceda165f4ffa64f4068af58c64b8f54b88c
暗号化されたデータの復号化アルゴリズム
インターフェイスに機密データ (wx.getUserInfo の openId や UnionId など) が含まれる場合、インターフェイスのプレーン テキスト コンテンツにはこれらの機密データは含まれません。開発者が機密データを取得する必要がある場合は、インターフェイスから返された暗号化データ (encryptedData) を対称的に復号化する必要があります。 復号化アルゴリズムは次のとおりです。
対称復号化に使用されるアルゴリズムは AES-128-CBC で、データは PKCS#7 でパディングされます。
対称復号のターゲット暗号文は Base64_Decode(encryptedData) です。
対称復号化キー aeskey = Base64_Decode(session_key)、aeskey は 16 バイトです
对称解密算法初始向量 iv 会在数据接口中返回。
微信官方提供了多种编程语言的示例代码(点击下载)。每种语言类型的接口名字均一致。调用方式可以参照示例。
注:此前提供的加密数据(encryptData)以及对应的加密算法将被弃用,请开发者不要再依赖旧逻辑。
用户信息:
### wx.getUserInfo(OBJECT)
获取用户信息,需要先调用 wx.login 接口。
OBJECT参数说明:
success返回参数说明:
示例代码:
wx.getUserInfo({ success: function(res) { var userInfo = res.userInfo var nickName = userInfo.nickName var avatarUrl = userInfo.avatarUrl var gender = userInfo.gender //性别 0:未知、1:男、2:女 var province = userInfo.province var city = userInfo.city var country = userInfo.country } })
encryptedData 解密后为以下 json 结构,详见加密数据解密算法
{ "appId": "APPID", "openId": "OPENID", "nickName": "NICKNAME", "gender": 1, "city": "CITY", "province": "PROVINCE", "country": "COUNTRY", "avatarUrl": "AVATARURL", "unionId": "UNIONID" }
UnionID机制说明:
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
微信开放平台绑定小程序流程
前提:微信开放平台帐号必须已完成开发者资质认证
开发者资质认证流程:
登录微信开放平台(open.weixin.qq.com) – 帐号中心 – 开发者资质认证
微信支付:
wx.requestPayment(OBJECT)
发起微信支付。
Object参数说明:
示例代码:
wx.requestPayment({ 'timeStamp': '', 'nonceStr': '', 'package': '', 'signType': 'MD5', 'paySign': '', 'success':function(res){ }, 'fail':function(res){ } })
基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。
模板推送位置:服务通知
模板下发条件:用户本人在微信体系内与页面有交互行为后触发,详见下发条件说明
模板跳转能力:点击查看详情仅能跳转下发模板的该帐号的各个页面
使用说明
获取模板 id
登录https://mp.weixin.qq.com获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用,详见模板审核说明
页面的
组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。调用接口下发模板消息(详见接口说明)
接口说明
1. 获取 access_token
access_token 是全局唯一接口调用凭据,开发者调用各接口时都需使用 access_token,请妥善保存。access_token 的存储至少要保留512个字符空间。access_token 的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效。
公众平台的 API 调用所需的 access_token 的使用及生成方式说明:
为了保密 appsecrect,第三方需要一个 access_token 获取和刷新的中控服务器。而其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则会造成 access_token 覆盖而影响业务;
目前 access_token 的有效期通过返回的 expires_in 来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新 access_token。在刷新过程中,中控服务器对外输出的依然是老 access_token,此时公众平台后台会保证在刷新短时间内,新老 access_token 都可用,这保证了第三方业务的平滑过渡;
access_token 的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新 access_token 的接口,这样便于业务服务器在 API 调用获知 access_token 已超时的情况下,可以触发 access_token 的刷新流程。
开发者可以使用 AppID 和 AppSecret 调用本接口来获取 access_token。AppID 和 AppSecret 可登录微信公众平台官网-设置-开发设置中获得(需要已经绑定成为开发者,且帐号没有异常状态)。AppSecret 生成后请自行保存,因为在公众平台每次生成查看都会导致 AppSecret 被重置。注意调用所有微信接口时均需使用 https 协议。如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新 access_token,那么就可能会产生冲突,导致服务不稳定。
接口地址:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
HTTP请求方式:
GET
参数说明 :
返回参数说明:
正常情况下,微信会返回下述 JSON 数据包给开发者:
{"access_token": "ACCESS_TOKEN", "expires_in": 7200}
2. 发送模板消息
接口地址:(ACCESS_TOKEN 需换成上文获取到的 access_token)
https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
HTTP请求方式:
POST
POST参数说明:
示例:
{ "touser": "OPENID", "template_id": "TEMPLATE_ID", "page": "index", "form_id": "FORMID", "data": { "keyword1": { "value": "339208499", "color": "#173177" }, "keyword2": { "value": "2015年01月05日 12:30", "color": "#173177" }, "keyword3": { "value": "粤海喜来登酒店", "color": "#173177" } , "keyword4": { "value": "广州市天河区天河路208号", "color": "#173177" } }, "emphasis_keyword": "keyword1.DATA" }
返回码说明:
在调用模板消息接口后,会返回JSON数据包。
正常时的返回JSON数据包示例:
{ "errcode": 0, "errmsg": "ok", }
错误时会返回错误码信息,说明如下:
使用效果:
注意:内部测试阶段,模板消息下发后,在客户端仅能看到由“公众号安全助手”下发的简单通知。能收到该提示,即表明模板消息功能已经调试成功。待该功能正式上线后,将可以展示成上图效果。
下发条件说明
1、支付
当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发1条,多次支付下发条数独立,互相不影响)
2、提交表单
当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)
审核说明
1.标题
1.1标题不能存在相同
1.2标题意思不能存在过度相似
1.3标题必须以“提醒”或“通知”结尾
1.4标题不能带特殊符号、个性化字词等没有行业通用性的内容
1.5标题必须能体现具体服务场景
1.6标题不能涉及营销相关内容,包括不限于:
消费优惠类、购物返利类、商品更新类、优惠券类、代金券类、红包类、会员卡类、积分类、活动类等营销倾向通知
2.关键词
2.1同一标题下,关键词不能存在相同
2.2同一标题下,关键词不能存在过度相似
2.3 キーワードには、特殊な記号、個人化された単語、または業界全体ではないその他のコンテンツを含めることはできません。
2.4 キーワードの内容例はキーワードと一致する必要があります
2.5 キーワードは広すぎることはできず、制限する必要があります。たとえば、「コンテンツ」は広すぎるため承認できません。
違反の説明
運用規定に違反しないことに加えて、以下の規則にも違反してはなりません。これには以下が含まれますが、これらに限定されません。
ユーザーにテンプレートを配信する目的を達成するために、ユーザーにトリガー操作の実行を悪意を持って誘導することは許可されません。
悪意のある嫌がらせは許可されず、ユーザーに嫌がらせを引き起こすテンプレートも許可されません。
悪意のあるマーケティングは許可されず、マーケティング目的のテンプレートが発行されます。
ミニ プログラム内でトリガーされるサービス関連コンテンツをユーザーに通知するために、サービス アカウントを通じてテンプレートを発行することは許可されていません。
罰の説明
違反に応じて、対応する勾配ペナルティが与えられます。一般的なペナルティ規則は次のとおりです。
最初の違反の場合、問題のあるテンプレートは警告として削除されます。
2 回目の違反の場合、インターフェイスは 7 日間禁止されます。
3 回目の違反の場合、インターフェイスは 30 日間禁止されます。
4 回目の違反では、インターフェイスは永久に禁止されます。
処分結果と理由は場内文書で通知する。
以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。
WeChat ミニ プログラムの詳細 - WeChat ログイン、WeChat 支払い、テンプレート メッセージ関連記事の詳細については、PHP 中国語 Web サイトに注目してください。