1、获取微信的高度进行计算要使用px,否则出现机型位差!
2、导航实现如果不复杂使用配置里的导航,如果复杂使用custom-tab-bar,避免点击闪屏
3、项目时间容许的情况下,建议使用骨架屏,避免第一次加载轻微闪屏
继续阅读1、获取微信的高度进行计算要使用px,否则出现机型位差!
2、导航实现如果不复杂使用配置里的导航,如果复杂使用custom-tab-bar,避免点击闪屏
3、项目时间容许的情况下,建议使用骨架屏,避免第一次加载轻微闪屏
继续阅读扫码体验:(已无法体验,国内屏蔽严重,镜像地址已被封禁,我也不想花钱整国外服务器)
仓库:https://gitee.com/netzhouxiang/chat-gpt
注意:目前api.openai.com域名已被拦截,如果需要可以走代理,大家娱乐就好,别当正经事情做,我仓库里用的替代地址,而且因网络和机器人反应慢等问题,微信超五秒就会服务故障,所以我还增加了未读功能,如果是服务器可以通过主动推送消息,我这是订阅号只能发一下回一条,有需要的自己改进
效果如下:
function onBridgeReady() {
WeixinJSBridge.call('hideOptionMenu');
}
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
} else {
onBridgeReady();
}
需要的类 用于反序列化
public class GuanZhuModel2 { public int total { get; set; } public int count { get; set; } public OpenIdListData data { get; set; } public string next_openid { get; set; } } public class OpenIdListData { ////// OPENID的列表 /// public Listopenid { get; set; } }
具体方法:
string returnStr = HttpUtil.Send("", "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + Convert.ToString(PayCenter.getCache("wxModelAccess")) + "&next_openid="); var obj = JsonConvert.DeserializeObject(returnStr); for (int i = 0; i < obj.data.openid.Count; i++) { var openid = Convert.ToString(obj.data.openid[i]); UserOpen openmodel = new UserOpenDAL().GetOpenIDOrType(openid, 1); new WXAPICommon(null, null, null).ReturnTxt(openid, "尊敬的用户,由于惠号网帐户体系升级,您的帐户类型已变更!"); if (openmodel == null) { WeiXinCommon.GuanZhuList.Add(new GuanZhuModel() { fromUserName = openid, EventKey = "" }); } }
下面是获取公众号的授权,注意的是 公众号授权与网页授权不一样的 获取到后 缓存起来 保存2小时
string url2 = string.Format( "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", WeiXinPay.WxConfig.appid, WeiXinPay.WxConfig.appsecret); string returnStr2 = HttpGet.PageGet(url2, null, "text/HTML"); var obj2 = JsonConvert.DeserializeObject(returnStr2); if (obj2 != null && obj2.access_token != "") { if (PayCenter.getCache("wxModelAccess") != null) { PayCenter.removeCache("wxModelAccess"); } PayCenter.addCache("wxModelAccess", obj2.access_token, 2); }