微信公众号支付dome注意事项,及get、post无法传参解决办法

原创 2016年05月31日 17:00:36

实例运行注意事项:

  1. Wxpay.config.php设置APPID、MCHID、KEY、APPSECRET(按照dome中的要求配置就OK)
  2. 下载证书到cert目录下(到这一步dome实例就可以运行了)
  3. 运行时报错:call to undefind function libxml_disable_entity_loader() in;注意是你的服务器没有配置libxml2.dll造成的。要是实在解决不了可以注释掉Wxpay.data.php中(这种解决办法不提倡,会造成安全漏洞)

//将XML转为array
//禁止引用外部xml实体
//libxml_disable_entity_loader(false);
$this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $this->values;

  • 报错:return_msg:JSAPI支持必须传openid,Wxpay.JsApiPay.php中"Uncaught exception  ' WxPayException' with message ' 参数错误' in ''。修改WxPay.JsApiPay.php中curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,TRUE);TRUE为FALSE;curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,2);2为FALSE

网站传参到微信支付接口(GET)传参解决方案:

  1. 传参路径:http://域名/Wxpay/example/jsapi.php?state=参数
  2. 修改WxPay.JsApiPay.php中JsApiPay类函数参数

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,$_GET['state']);

Header("Location: $url");
exit();
} else {
//获取code码,以获取openid
   $code = $_GET['code'];
$state=$_GET['state'];
$openid = $this->GetOpenidFromMp($code,$state);
return $openid;
}
}

/**

* 通过code从工作平台获取openid机器access_token
* @param string $code 微信跳转回来带上的code

* @return openid
*/
public function GetOpenidFromMp($code,$state)
{
$url = $this->__CreateOauthUrlForOpenid($code,$state);
//初始化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 $openid;
}

/**

* 构造获取code的url连接
* @param string $redirectUrl 微信服务器回跳的url,需要url编码

* @return 返回构造好的url
*/
private function __CreateOauthUrlForCode($redirectUrl,$state)
{
$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,$state)
{
$urlObj["appid"] = WxPayConfig::APPID;
$urlObj["secret"] = WxPayConfig::APPSECRET;
$urlObj["code"] = $code;
$urlObj["grant_type"] = "authorization_code";
$urlObj["state"] = $state;
$bizString = $this->ToUrlParams($urlObj);
return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
}


注意:以上GET方式传参可能会导致信息泄露,谨慎使用!大家有更好的解决办法请留言,互相学习!谢谢阅读。

版权声明:本文为博主原创文章,未经博主允许不得转载。

微信公众号get与post请求实现模版

在做微信公众平台后台开发的时候,常常需要用代码实现模拟浏览器的GET和POST请求, 下面是用Java语言实现的GET和POST请求的一般写法:1.GET请求模拟(不带参数) //由于这类方法...
  • zhaoaiqq
  • zhaoaiqq
  • 2017年11月28日 10:35
  • 542

post方式 or get方式传参

所有的人都知道如下区别: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限...
  • dingxingmei
  • dingxingmei
  • 2013年05月14日 14:36
  • 8952

GET和POST方式传递参数

使用GET方式传递参数 使用POST方式传递参数 提交、重置、普通按钮如何传送参数 单行与多行文本输入框如何传送参数 单选按钮与复选框如何传送参数 隐藏表单字段与图像字段如何传送参...
  • songlixing
  • songlixing
  • 2011年11月07日 19:56
  • 44481

http传参get与post的误区与总结

转自:http://xinyangwjb.iteye.com/blog/1323336 众所周知的http请求有两种:  get与post:  这两种请求的区别就是传参的参数放的位置不同,一个在...
  • lanqibaoer
  • lanqibaoer
  • 2014年07月14日 15:36
  • 792

servlet的传参例子以及get与post的之间的问题

以下例子为实现从一张html页面传入参数到servlet当中用的是get方法学校老师说用get方法传会出现问题,要我们就用post后来我查了查资料发现问出在get的请求方式上面。它是把参数放在请求头里...
  • ourmessage
  • ourmessage
  • 2006年12月03日 15:06
  • 1547

Ajax以post方式传送带参的数据方式与get请求的不同

若发送带参数的post请求时必须加上下面这段代码告知服务器将会有参数传过来,不然后台用request.getParameter()将无法获取。 xmlhttp.setRequestHeader("Co...
  • CongBird
  • CongBird
  • 2017年02月23日 17:33
  • 616

jmeter传参二:get与post请求参数传递方法

得到开发提供的接口文档后,就可以开始写脚本了,如: 1. get请求的入参是json格式的 摘要: 利用httpClient调用接口,成功返回信息 接口地址: (RESTFUL...
  • hw1932
  • hw1932
  • 2017年02月27日 21:15
  • 6236

原生ajax post 和get 方式传值

原生ajax post 和get 方式传值
  • lamp113
  • lamp113
  • 2016年02月29日 21:32
  • 6446

HTTP协议下Android web应用GET和POST请求方法的请求、响应、传参

一、Eclipse创建Dynamic Web Project工程 1、File——new File——写入工程名——Target runtime下面选折Apache tomcat v8.0 并点选右...
  • Dorsey_c
  • Dorsey_c
  • 2015年11月18日 23:30
  • 1364

HttpClient用Post和Get带参数提交帮助类

import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.H...
  • u013810758
  • u013810758
  • 2016年08月24日 21:32
  • 8252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信公众号支付dome注意事项,及get、post无法传参解决办法
举报原因:
原因补充:

(最多只允许输入30个字)