【获取微信openId】

在这里插入图片描述
在微信公众平台 设置对应的域名

<?php
/**
 *获取openid和access_token等参数类
 * 该类实现了从微信公众平台获取code、通过code获取openid和access_token、
 *
 * @author widy
 *
 */
class JsApiPay
{
	/**
	 * 
	 * 网页授权接口微信服务器返回的数据,返回样例如下
	 * {
	 *  "access_token":"ACCESS_TOKEN",
	 *  "expires_in":7200,
	 *  "refresh_token":"REFRESH_TOKEN",
	 *  "openid":"OPENID",
	 *  "scope":"SCOPE",
	 *  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
	 * }
	 * 其中access_token可用于获取共享收货地址
	 * openid是微信支付jsapi支付接口必须的参数
	 * @var array
	 */
	public $data = null;

	/**
	 * 
	 * 通过跳转获取用户的openid,跳转流程如下:
	 * 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize
	 * 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
	 * 
	 * @return 用户的openid
	 */
	public function GetOpenid()
	{
		//通过code获得openid
		if (!isset($_GET['code'])){
			//触发微信返回code码
			$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);
			$url = $this->__CreateOauthUrlForCode($baseUrl);
			Header("Location: $url");
			exit();
		} else {
			//获取code码,以获取openid
		    $code = $_GET['code'];
			//$openid = $this->getOpenidFromMp($code);
			$data = $this->GetOpenidFromMpData($code);
			return $data;
		}
	}
	
	/**
	 * 
	 * 获取jsapi支付的参数
	 * @param array $UnifiedOrderResult 统一支付接口返回的数据
	 * @throws WxPayException
	 * 
	 * @return json数据,可直接填入js函数作为参数
	 */
	public function GetJsApiParameters($UnifiedOrderResult)
	{
		if(!array_key_exists("appid", $UnifiedOrderResult)
		|| !array_key_exists("prepay_id", $UnifiedOrderResult)
		|| $UnifiedOrderResult['prepay_id'] == "")
		{
			return "error:参数错误";
			throw new WxPayException("参数错误");
		}
		$jsapi = new WxPayJsApiPay();
		$jsapi->SetAppid($UnifiedOrderResult["appid"]);
		$timeStamp = time();
		$jsapi->SetTimeStamp("$timeStamp");
		$jsapi->SetNonceStr(WxPayApi::getNonceStr());
		$jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']);
		$jsapi->SetSignType("MD5");
		$jsapi->SetPaySign($jsapi->MakeSign());
		$parameters = json_encode($jsapi->GetValues());
		return $parameters;
	}
	
	/**
	 * 
	 * 通过code从工作平台获取openid机器access_token
	 * @param string $code 微信跳转回来带上的code
	 * 
	 * @return data
	 */
	
	public function GetOpenidFromMpData($code)
	{
		$url = $this->__CreateOauthUrlForOpenid($code);
		//初始化curl
		$ch = curl_init();
		//设置超时
		curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout);
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE);
		curl_setopt($ch, CURLOPT_HEADER, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		if(\WxPayConfig::$CURL_PROXY_HOST != "0.0.0.0" 
			&& \WxPayConfig::$CURL_PROXY_PORT != 0){
			curl_setopt($ch,CURLOPT_PROXY, \WxPayConfig::$CURL_PROXY_HOST);
			curl_setopt($ch,CURLOPT_PROXYPORT, \WxPayConfig::$CURL_PROXY_PORT);
		}
		//运行curl,结果以jason形式返回
		$res = curl_exec($ch);
		curl_close($ch);
		//取出openid
		$data = json_decode($res,true);
		$this->data = $data;
		$openid = $data['openid'];
		return $data;
	}
	/**
	 * 
	 * 拼接签名字符串
	 * @param array $urlObj
	 * 
	 * @return 返回已经拼接好的字符串
	 */
	private function ToUrlParams($urlObj)
	{
		$buff = "";
		foreach ($urlObj as $k => $v)
		{
			if($k != "sign"){
				$buff .= $k . "=" . $v . "&";
			}
		}
		
		$buff = trim($buff, "&");
		return $buff;
	}
	

	
	/**
	 * 
	 * 构造获取code的url连接
	 * @param string $redirectUrl 微信服务器回跳的url,需要url编码
	 * 
	 * @return 返回构造好的url
	 */
	private function __CreateOauthUrlForCode($redirectUrl)
	{
		$urlObj["appid"] = WxPayConfig::$APPID;
		$urlObj["redirect_uri"] = "$redirectUrl";
		$urlObj["response_type"] = "code";
		$urlObj["scope"] = "snsapi_base";
		$urlObj["state"] = "STATE"."#wechat_redirect";
		$bizString = $this->ToUrlParams($urlObj);
		return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
	}
	
	/**
	 * 
	 * 构造获取open和access_toke的url地址
	 * @param string $code,微信跳转带回的code
	 * 
	 * @return 请求的url
	 */
	private function __CreateOauthUrlForOpenid($code)
	{
		$urlObj["appid"] = WxPayConfig::$APPID;
		$urlObj["secret"] = WxPayConfig::$APPSECRET;
		$urlObj["code"] = $code;
		$urlObj["grant_type"] = "authorization_code";
		$bizString = $this->ToUrlParams($urlObj);
		return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
	}
}

微信对应文档

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,您需要在开发者后台应用中,设置您的服务器域名,接着获取应用的 App ID 和 App Secret,然后在获取 OpenID 的 URL 中替换 APPID 和 SECRET 参数,获取授权页面,让用户扫码授权,然后获取到用户的 openid。 ### 回答2: 腾讯低代码如何获取微信OpenID 腾讯低代码是一种快速开发工具,可用于构建Web应用程序和移动应用程序。要获取微信OpenID,可以使用以下方法: 1. 在腾讯低代码的开发环境中,添加一个微信登录组件。这个组件将允许用户使用微信账号登录应用程序。 2. 配置微信登录组件。打开组件的属性设置界面,输入你的微信开发者账号信息,包括AppID和AppSecret。这些信息可以在微信开放平台上申请获得。 3. 创建一个用于保存用户信息的数据库。在腾讯低代码中,可以使用数据库组件来创建和管理数据库。 4. 在用户使用微信登录后,腾讯低代码将会返回一个授权码。使用这个授权码,调用微信开放平台的API,向微信服务器发送请求,以获取用户的OpenID。 5. 将返回的OpenID保存到数据库中,与用户的其他信息一起存储。可以使用数据库组件提供的相关函数来实现这一步骤。 6. 在应用程序的其他部分,可以根据需要随时获取用户的OpenID,并进行相关的业务操作。 需要注意的是,获取微信OpenID涉及到与微信开放平台的交互,因此需要事先在微信开放平台上创建开发者账号,并进行相应的配置和权限设置。同时,在使用微信登录功能时,也需要用户授权才能获取到他们的OpenID。 综上所述,以上是腾讯低代码获取微信OpenID的具体方法。通过配置微信登录组件、调用微信开放平台的API以及使用数据库组件等功能,可以实现在腾讯低代码中获取和保存用户的微信OpenID。 ### 回答3: 腾讯低代码是腾讯推出的一种开发工具,旨在帮助开发者快速构建应用程序。获取微信openid是一种常见需求,可以通过以下具体方法在腾讯低代码中实现: 1. 登录微信开放平台:首先,开发者需要登录微信开放平台,在开发者中心创建一个应用并获取其AppID和AppSecret。 2. 构建认证链接:在腾讯低代码的页面或流程中,建立一个与微信登录相关的功能,例如一个按钮或跳转链接。 3. 生成认证链接:使用腾讯低代码提供的API,将前面获取到的AppID和回调URL(用于接收授权码)拼接成一个认证链接。认证链接的格式如下: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 4. 用户授权登录:用户点击该链接后,将跳转至微信授权页面,用户需要登录并确认授权给应用访问其基本信息的权限。 5. 获取授权码:用户授权后,微信会将授权码(code)传递至之前设定的回调URL。在腾讯低代码中,可以通过回调事件来接收这个授权码。 6. 通过授权码获取openid:使用腾讯低代码提供的API,通过授权码连同AppID、AppSecret等参数发送请求,从微信开放平台获取用户的openid信息。具体获取openid的API如下所示: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 7. 处理返回结果:收到微信开放平台返回的结果后,即可从中提取出用户的openid,用于后续的业务逻辑处理。 通过以上具体方法,开发者可以在腾讯低代码中实现获取微信openid的功能,用于实现与微信用户信息相关的应用需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值