2018-10-23 11:05:27 SongSir001 阅读数 1035
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27783 人正在学习 去看看 翟东平

一、场景

在对接微信H5支付API时,有一关键步骤是获取到用户的真实IP,微信开发文档给出的解释为:

H5支付要求商户在统一下单接口中上传用户真实ip地址“spbill_create_ip”,
为保证微信端获取的用户ip地址与商户端获取的一致.

二、方法

1、微信官方方法

(1)没有代理

function get_client_ip()
{
    $cip = "unknown";
    if ($_SERVER['REMOTE_ADDR'])
    {
        $cip = $_SERVER['REMOTE_ADDR'];
    }
    elseif (getenv("REMOTE_ADDR")
    {
        $cip = getenv("REMOTE_ADDR");
    }
    return $ip
}

(2)有代理

有代理的情况下,因为要代替客户端去访问服务器,而代理服务器这里的IP数据报的包头做了修改,这样一来,后端程序就无法获取到用户的真实IP。

nginx代理情况:
在nginx配置中加入:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Apache代理的情况:

vi /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-remoteip.conf
vi /usr/local/apache/conf/extra/httpd-remoteip.conf
LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1

博主备注:腾讯文档依旧保持尽可能让读者搞不懂的态度,所以下面给出简单可行的方法。

2、非官方方法

以下只使用Java开发语言

(1)代码

private static final String[] headInfo = { "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP",
			"HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP",
			"HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR", "PROXY_FORWARDED_FOR", "X-Real-IP"};

	/**
	 * 
	 * getClientIpAddress:(获取用户ip,可穿透代理).
	 * @author SongYapeng
	 * @Date 2018年3月2日下午4:41:47
	 * @param request
	 * @since JDK 1.8
	 */
	public static String getClientIpAddress(HttpServletRequest request) {
		for (String header : headInfo) {
			String ip = request.getHeader(header);
			if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
				if (ip != null && ip.indexOf(",") != -1) {
					String[] ips = ip.split(",");
					for (int i = 0; i < ips.length; i++) {
						String ipMulti = (String) ips[i];
						if (!("unknown".equalsIgnoreCase(ipMulti))) {
							ip = ipMulti;
							break;
						}
					}
				}
				return ip;
			}
		}
		return request.getRemoteAddr();
	}

(2)说明

没有代理的情况下使用request.getRemoteAddr() 可以正常获取到客户端的IP地址。
但是,秉承着别人没问题自己必然出Bug的传统,大多数情况下,总是获取到的是本地IP。

通过了解到反向代理修改了数据报的头部,上面headInfo数组中罗列了代理后HTTP头信息中可能增加的信息字段。

通过方法getClientIpAddress(),可穿透代理获取到用户真实IP。

(3)补充

上面方法不能保证百分之百没问题,因为不同的代理服务器可能需要不同的配置。我们使用的是F5负载均衡,效果不太理想,后通过运维大哥在F5上配置X-Forwarded-For后才得以实现。

2018-01-15 22:14:46 MYTLJP 阅读数 4952
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27783 人正在学习 去看看 翟东平

用了好几个小时的时间,整理了一下关于公众号的思维导图,由于CSDN不能上传相对应的文件,所以萍子一一的分解开的截图附上来,希望对大家有所帮助哦~
因为是电脑设备自动截图,又鉴于内容比较多,可能不是太清楚,需要的小伙伴们,可以联系我,我可以随时发给你。

学习微信公众号需要的配置

这里写图片描述


微信开发的主体、请求方式、数据类型和环境

主体

这里写图片描述

请求方式

这里写图片描述
这里写图片描述

数据类型和环境

这里写图片描述


开始开发

获取access_token值并存储

这里写图片描述
这里写图片描述


账号管理

生成带参数的二维码

这里写图片描述

长链接转短链接

这里写图片描述


消息管理

获取微信服务器的IP地址

接收普通消息

接收事件推送

被动回复用户消息

这里写图片描述


微信网页授权

微信网页授权步骤

第一步:跳转页面,用户同意授权,获取code

这里写图片描述

第二步:通过code换取网页授权access_token(与普通的access_token不一样,具体见下方)
第三步:如果需要,刷新access_token值

这里写图片描述

第四步:拉取用户信息(需要scope为snsapi_userinfo)
第五步:附,检验授权凭证access_token是否有效,一般用不到

这里写图片描述


微信JS-SDK

说明

这里写图片描述

JS-SDK使用步骤

这里写图片描述

上传图片素材

这里写图片描述


微信公众号

握手协议

这里写图片描述

自定义菜单

自定义菜单类型

这里写图片描述

自定义菜单的设置

这里写图片描述

自定义菜单参数说明

这里写图片描述

获取自定义菜单

这里写图片描述


自定义菜单事件推送/被动回复用户信息

自定义事件推送

这里写图片描述

被动回复用户信息

这里写图片描述

根据菜单类型的点击,被动回复

点击按钮事件

这里写图片描述

公众号首次被某个用户关注的推送

这里写图片描述

微信扫一扫,并展示扫的内容

这里写图片描述

推送图文消息

这里写图片描述

回复图片消息
没有点击按钮

这里写图片描述

2016-10-27 16:45:22 xiaoyezihanghui 阅读数 5061
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27783 人正在学习 去看看 翟东平


释: 我是订阅号,申请的微信开发测试账号,操作授权登录


1.  下载web开发工具


2.  在公众号列表中, 开发者工具-》web开发工具-> 绑定开发者账号 -》输入你的微信号(微信号需关注公众号才可绑定),邀请绑定在微信客户端确认邀请即可


3.  在测试管理账号中, 网页授权获取用户基本信息  接口,点击修改  填充(授权回调页面域名),沙盒测试环境不限ip和域名,我填充的ip ( 注释: ip填充只需 如192.168.0.1:port,前缀不需要http,此坑已踩)


4.  授权链接 https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx58caa75dbeb054aa&redirect_uri=http://192.168.0.1:8014/wechat_login&response_type=code&scope=snsapi_userinfo&state=1   回调按照自己的需求更改即可

2018-04-15 16:02:32 qq_34930488 阅读数 1065
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27783 人正在学习 去看看 翟东平

1.认证微信公众号

            时长:1-2天


配置公众号信息

                 菜单:开发->基本配置


                1.AppID:公众号识别码

                2.AppSecret:开发者密码(只可重置 不可更改)

                3.IP白名单:多个ip用回车隔开


配置java服务端

       获取openId

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60    //测试appid  将公众号appid填入&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php //测试路径  将微信公众号路径url编码后填入&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

        获取用户信息

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

2.域名备案(域名只能使用80端口)

            时长:最长一个月

                注:微信获取用户位置信息需https

3.网页授权获取用户基本信息

                菜单:开发->接口权限->网页授权获取用户基本信息

                设置网页授权域名:

              

将验证文件放入域名下:

            1.tomcat:放入webapp/root文件夹

            2.nginx:放入html文件夹

  

2020-01-03 17:45:44 qq_17798999 阅读数 27
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27783 人正在学习 去看看 翟东平

微信H5授权获取code,拿取用户信息

##如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
在这里插入图片描述
这是微信给的说明文档,但实际上,我们首先要做的是去微信公众平台设置一些配置

  1. 开发–>基础配置
    在这里插入图片描述
    这里我们就可以拿到AppIDAppSecret(后台会用到)及ip白名单
  2. 开发–>接口权限
    在这里插入图片描述
    在这里插入图片描述
    设置js接口安全域名与网页授权域名

到这里前期的基础工作就已经完成了

下面就开始代码部分

// 判断是否为公众号模拟器环境
	const isWechat = () => {
		return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
	}

我们要拿code,就必须先访问这个地址,其中appid 是必填(可以把这串地址直接放到微信浏览器中打开,就会出现授权提示)

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

访问微信给的链接地址,就可以拿取到code,下面这部分代码就是拿取code

// 判断公众号截取code
	const getUrlParam = (name) => {
		let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
		let r = window.location.search.substr(1).match(reg);
		if (r != null) {
			return unescape(r[2]);
		}
		return null;
	}

参数说明

参数 是否必须 说明
appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

下面我自己上写的一个测试demo代码

// 判断是否为公众号模拟器环境
	const isWechat = () => {
		return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
	}

// 判断公众号截取code
	const getUrlParam = (name) => {
		let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
		let r = window.location.search.substr(1).match(reg);
		if (r != null) {
			return unescape(r[2]);
		}
		return null;
	}
	export default {
		data() {
			return {
				code: ''
			}
		},
		onLoad() {
			this.getWxCode()
		},
		methods: {
			getWxCode(){
				if (isWechat()) {
					let appid = "wxae048f1b059e77c0"; //为测试号id
					let code = getUrlParam("code"); //是否存在code
					let local = window.location.href;
					// let local = 'http://h5.x*****o.com/'		//测试路径
					if (code == null || code === "") {				
						//不存在就打开上面的地址进行授权
						window.location.href =
							`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect`;				
						// https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxae048f1b059e77c0&redirect_uri=http://devapi.xingyeqiao.com/&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect								
					}else{
						this.code = code
					}
				}
			}
		}
	}

local路径要和授权域名对应上
window.location.href跳转去授权,授权成功后会重定向之前的页面,这样我们就拿到code,然后把code给后台,就可以拿到openid,获取到用户信息了

vue中获取微信定位

阅读数 848

微信H5支付(Java)

阅读数 525

没有更多推荐了,返回首页