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

一个微信公众号的外链网页,使用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

membalas semua(5)
黄舟

Halaman hadapan tulen tidak boleh dilaksanakan Anda hanya boleh mengkonfigurasi nama domain halaman panggil balik kebenaran ke pelayan hujung belakang, dan kemudian mengubah halanya dari hujung belakang

.
PHPzhong

Anda boleh menggunakan indexOf() untuk mendapatkan nilai kod

var url  = 'http://example.com?code=aaabbb/#/home';
var n = url.indexOf('code=')+5;
var m = url.indexOf('/#');
var code = url.substr(n, m-1);

Dengan cara ini anda boleh mendapatkan nilai kod

phpcn_u1582

Halaman hadapan tulen tidak boleh dilaksanakan Kebetulan baru-baru ini saya telah melakukan projek serupa, yang turut menggunakan angularjs dan melaksanakan program satu halaman melalui angular-route.js.

Panggil antara muka latar belakang melalui ajax dalam program halaman tunggal (index.html),
Jika berjaya, kembalikan: {status:true,...}
Jika tidak log masuk dan gagal, kembalikan: {status:falst,next: 'log masuk',errmsg :'Ralat'}
Ralat lain dikembalikan: {status:falst,next:'Next operation',errmsg:'Error'}

Jika status pulangan result.status==false, result.next=='login':

case "login":
    $http.get($api.callback($api.login)).success(function(val){
        //通过后台返回 授权地址
        location.href = val.loginUrl;
    });
    return;

Beri kuasa untuk melompat ke wxlogin.php Selepas mengesahkan bahawa log masuk berjaya, selepas menetapkan SESI, lompat ke program satu halaman (index.html)
Atur cara akan terus memanggil antara muka , ia mengembalikan: {status:true ,...}

某草草

Poster asal berakhir dengan location.href=""?

洪涛

Bagaimanakah perkara ini harus diselesaikan? Penulis akan menyiarkan jawapan untuk menyelesaikannya. Saya juga akan menggunakan Vue untuk membangunkan WeChat

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!