环境:
使用asp及php编写,access数据库;主体是asp编写,与微信公众号相关部分用php编写(半路接手)。
注:以下域名url不是该项目路径。
微信公众号配置:
登录微信服务号 ——> 公众号设置 ——> 功能设置 ——> 设置业务域名、JS接口安全域名、网页授权域名,如 www.hiretianxia.cn(将文件MP_verify_CmXLvDiUaaC0TCeA.txt(需点击下载)上传至填写域名的根目录下) ——> 开发 ——> 基本配置 ——> 设置或重置开发者密码(即secret值,保存以待后用)-> IP白名单(设置成程序所在服务器的IP)->服务器配置->启动服务器配置。
一、token.php中多服务号关注事件写法:
token.php中开始被注释的几行代码在添加新服务号时,必须在新服务号服务器配置前取消注释,配置后再恢复注释,否则配置时会token验证失败(此处未截图)。
二、多服务号网页授权:
1、各服务号生成微信菜单时,view的url路径传值区分,如www.hiretianxia.cn/quan.asp?gsid=999;
2、quan.asp页面获取gsid值,根据gsid从数据库中查询(必须先判断gsid不为空时才查询,原因后面说)事先在网站后台添加的服务号appid和secret并传给openid.php页面进行网页授权;
3、openid.php页面获取到quan.asp页面传来的appid和secret值,进行网页授权第一步,获取code值,此步中url再传appid和secret值给本页,否则第二步无法获得appid和secret值;
4、网页授权第二步,获取第一步传来的appid和secret值,获取openid值,然后跳转至quan.asp页面,url为 www.hiretianxia.cn/quan.asp (此步传空值,如果步骤2中查询时不先判断gsid是否为空,导致quan.asp页面中再次查询并传空值跳转至openid.php页面,导致appid不能为空,错误码10012的错误提示),此处不能传gsid值,否则会quan.asp和openid.php页面间无限循环。
5、openid.php网页授权完整代码如下图,注意红框内容:
下面的方法更安全(只传一个用于辨别服务号来源的mdid,在授权页查询appid和secret):
6、新增服务号生成微信菜单(注意传值区分服务号),如diancan_menu_xin.php,修改appid 和appsecret值,在浏览器运行,如www.hiretianxia.cn/ diancan_menu_xin.php生成新服务号菜单(也可以在自定义菜单中直接设置跳转路径)
三、多服务号绑定同一网站时,微信公众号支付(2种方法不能同时用):
微信支付基本信息设置时不能用变量,只能用常量(除非大改微信支付或自己重写微信支付)。
微信商户平台设置:登录微信商户号->产品中心->开发配置(必须超级管理员即主账号)->支付配置->公众号支付->添加支付授权目录(如:http://www.hiretianxia.cn/zhifu/example/)->账户中心->API安全->API秘钥(2步设置秘钥)->正确记录秘钥(KEY值)。
方法一(推荐):从需要付款的页面传gsid值(用于鉴别服务号)给jsapi.php,再从jsapi.php传gsid值给WxPay.Config.php,获取区别服务号的gsid值,并在class WxPayConfig类外包裹if语句,通过获取的gsid判断应该选择哪个配置信息。
方法二:每加一个服务号就在网站根目录下复制添加一个zhifu文件夹,修改/zhifu/lib/WxPay.Config.php中的APPID、APPSECRET、MCHID、KEY值;修改/zhifu*/example/jsapi.php中的订单信息,*号位置为gsid值,前面添加支付授权目录时也需如此。
测试交易是否成功:可在客户商户号平台的交易中心->交易订单、资金账单及资金流水3个地方查看。
四、同一微信号关注了多个绑定了同一网站的服务号,如何避免session覆盖:
由于各服务号的gsid不一样,可在登陆成功后保存 $_SESSION[‘qbid’]= $ gsid用于区别。在打开某个服务号需要登录的页面时进行判断当前页面的gsid是否与 $ _SESSION[‘qbid’]相同,如果相同则表示是在同一个服务号内打开的页面,就直接使用登录时保存的user、tel等内容,如果不相同则表示是在其他服务号打开的页面,就清除之前保存的$_SESSION[‘user’]等值。