先去创建一个可以处理微信登录请求的后端服务接口 .. 找到我们在后端项目里创建的自定义插件 .. 我的是在 web .. app .. plugins,ninghao-wp-rest .. 在 includes ,endpoints 下面,打开这个 class-ninghao-wp-rest-weixin-controller.php
在这里我们之前添加了一个处理绑定微信帐号用的 REST 接口 ..
复制一份 register_routes 里的这个 register_rest_route .. 再添加一个新的接口 .. 接口的路由是 /login .. 这样这个接口的地址就是 weixin/v1/login ..
接口的回调可以使用当前实例里的 login 这个方法来处理 .. 权限检查回调可以用 login_permission_check 这个方法 ..
在这个类里再添加一个 login_permission_check 方法 .. 接收一个 $request 参数 .. 在方法里面先直接 return 一个 true .. 暂时先不做权限检查,用户可以直接使用这个接口 ..
login
再去添加一个处理接口请求的回调 .. 名字是 login .. 方法接收一个 $request 参数,它里面的东西就是用户发送过来的请求 ..
在方法里先添加一个 $js_code .. 它的值是 $request 里的 code 属性的值 .. 这个 code 是微信的登录凭证 ..
再添加一个 $session .. 用一下 $this 的 get_weixin_session ,把 $js_code 交给这个方法 .. 这个 get_weixin_session 会到微信服务端那里请求得到用户的微信的登录状态 ..
判断一下 .. is_wp_error .. $session .. 如果 $session 是 WordPress 的错误,就直接 return 这个 $session .. 这个时候这个 $session 应该是个 WordPress 的错误 .. 前端应用可以根据错误代码还有错误信息决定去做一些事情 ..
再添加一个 $user .. 用一下 $this 的 get_user_by_openid .. 在这个类里面,我们自己定义了这个 get_user_by_openid ,它可以根据微信给我们提供的用户的 openid 查询出网站上的对应的用户 ..
如果用户之前绑定过微信帐号,就应该可以用这个方法获取到对应的用户 .. 如果用指定的 openid 没有找到对应的网站用户,就说明当前这个微信帐号还没有跟网站上的某个用户绑定到一块儿 ..
下面判断一下 .. 如果没找到用户 .. 可以 return 一个 WordPress 的 Error .. 错误代码可以是 weixin_rest_not_bind .. 再添加一条错误信息 .. 让这条错误信息可以被翻译成其它语言 .. 用一下 __ 这个函数 .. 您的微信帐号还没有跟网站用户绑定 ..
一个参数数组 .. 把 status 设置成 404 .. 意思就是没找到用户 ..
最后可以再 return 一个 $user .. 也就是如果用登录凭证得到了 openid ,用这个 openid 找到了对应的网站用户。我们就暂时可以把上面用 get_user_by_openid 得到的这个用户响应回去 ..