angular.js - Angular开发的单页面应用,如何正确地实现在微信里的网页授权和调用js sdk
phpcn_u1582
phpcn_u1582 2017-05-15 17:12:10
0
5
904

一个微信公众号的外链网页,使用angular做成了单页应用,目前碰到了 微信网页授权 和 调用 js sdk 的问题


微信授权

据我所目前所知,调用了微信授权后,单页应用的入口 url 会长成这样(假定域名为:example.com):

  • http://example.com?code=aaabbb/#/home

或者(启用了html5 mode) 长成这样:

  • http://example.com/home?code=aaabbb

?code=aaabbb, 是微信授权后重定向时填充的,有了这个才能进一步去获取用户信息,参见 微信开发文档 > 获取code

至此,还不会出现问题


调用 js sdk

由于Android微信客户端不支持pushState的H5新特性,url②废弃(亲测,确实不能通过验证),所以入口url是这样:

  • http://example.com?code=aaabbb/#/home

现在问题来了,如果没有?code=aaabbb就能通过签名验证, 然后成功调用 js sdk,但实际情况是:如果需要授权?code=aaabbb必然存在,签名验证必定失败。那么到底如何做到授权和调用sdk均可用???

我目前的想法和做法是:微信授权重定向到http://example.com?code=aaabbb/#/home后,拿到code,然后再location.href = http://example.com/#/home。这样做是能拿到用户信息,并且成功调用sdk,但问题是每次进入应用,会刷新两次,这样用户体验极差,而且有强迫症的我也接受不了。

请教各位给个靠谱的方案


phpcn_u1582
phpcn_u1582

全員に返信(5)
黄舟

純粋なフロントエンドは実装できません。許可コールバック ページのドメイン名をバックエンド サーバーに設定し、バックエンドからリダイレクトすることのみ可能です。

いいねを押す +0
PHPzhong

indexOf()を使用してコード値を取得できます

リーリー

これでコード値を取得できます

いいねを押す +0
phpcn_u1582

純粋なフロントエンドは実装できません。たまたま、私は最近同様のプロジェクトを実行しましたが、これも angularjs を使用し、angular-route.js を通じて単一ページのプログラムを実装しました。

単一ページ プログラム (index.html) で ajax を介してバックグラウンド インターフェイスを呼び出します。
成功した場合は、戻り値: {status:true,...}
ログインしておらず失敗した場合、戻り値: {status:falst,next: 'login',errmsg :'Error'}
その他のエラーが返されました: {status:falst,next:'次の操作',errmsg:'Error'}

戻りステータスが result.status==false の場合、 result.next=='login':

リーリー

ログインが成功したことを確認した後、SESSIONを設定した後、シングルページプログラム(index.html)にジャンプします。
すでにログインしているため、プログラムは引き続きインターフェイスを呼び出します。 、次を返します: {status:true ,...}

いいねを押す +0
某草草

元のポスターは location.href=""?

になってしまいました
いいねを押す +0
洪涛

これをどうやって解決すればよいでしょうか? 私も Vue を使って WeChat を開発する予定です。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!