【微信公众平台开发教程】PHP微信支付开发1.开发环境Thinkphp3.2.3微信:服务号,已认证开发域名:(自定义的域名,外网不可访问)2.需要相关文件和权限微信支付需申请开通微信公众平台开发公开课:=1微信公众平台开发者文档:微信支付开发者文档:微信支付SDK下载地址:=11_1,文件目录为下图:把微信支付SDK的Cert和Lib目录放入Thinkphp,目录为现在介绍微信支付授权目录问题,首先是微信支付开发配置里面的支付授权目录填写,然后填写JS接口安全域。这些设置完,基本完成一半,注意设置的目录和我thinkphp里面的目录。4.微信支付配置把相关配置填写正确。/***配置账号信息*/classWxPayConfig{=======【基本信息设置】=====================================///***TODO:修改这里配置为您自己申请的商户信息*微信公众号信息配置**APPID:绑定支付的APPID(必须配置,开户邮件中可查看)**MCHID:商户号(必须配置,开户邮件中可查看)**KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)*设置地址:**APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置,登录公众平台,进入开发者中心可设置),*获取地址:=dev&t=advanced/dev&token=2005451881&lang=zh_CN*@varstring*/constAPPID='';constMCHID='';constKEY='';constAPPSECRET='';//=======【证书路径设置】=====================================/***TODO:设置商户证书路径*证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,*API证书下载地址:,下载之前需要安装商户操作证书)*@varpath*/constSSLCERT_PATH='../cert/apiclient_cert.pem';='../cert/apiclient_key.pem';//=======【curl代理设置】===================================/***TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0*本例程通过curl使用HTTPPOST方法,此处可修改代理服务器,*默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)*@varunknown_type*/constCURL_PROXY_HOST=0.0.0.0;//10.152.18.220;constCURL_PROXY_PORT=0;//8080;//=======【上报信息配置】===================================/***TODO:接口调用上报等级,默认紧错误上报(注意:上报超时间为【1s】,上报无论成败【永不抛出异常】,*不会影响接口调用流程),开启上报之后,方便微信监控请求调用的质量,建议至少*开启错误上报。*上报等级,0.关闭上报;1.仅错误出错上报;2.全量上报*@varint*/constREPORT_LEVENL=1;}现在开始贴出代码:namespaceWechat\Controller;useThink\Controller;/***父类控制器,需要继承*@fileParentController.class.php*@authorGarylizhiyong2204@sina.com*@date2015年8月4日*@todu*/classParentControllerextendsController{protected$options=array('token'='',//填写你设定的key'encodingaeskey'='',//填写加密用的EncodingAESKey'appid'='',//填写高级调用功能的appid'appsecret'='',//填写高级调用功能的密钥'debug'=false,'logcallback'='');public$errCode=40001;public$errMsg=noaccess;/***获取access_token*@returnmixed|boolean|unknown*/publicfunctiongetToken(){$cache_token=S('exp_wechat_pay_token');if(!empty($cache_token)){return$cache_token;}$url='=client_credential&appid=%s&secret=%s';$url=sprintf($url,$this-options['appid'],$this-options['appsecret']);$result=$this-http_get($url);$result=json_decode($result,true);if(empty($result)){returnfalse;}S('exp_wechat_pay_token',$result['access_token'],array('type'='file','expire'=3600));return$result['access_token'];}/***发送客服消息*@paramarray$data消息结构{touser:OPENID,msgtype:news,news:{...}}*/publicfunctionsendCustomMessage($data){$token=$this-getToken();if(empty($token))returnfalse;$url='=%s';$url=sprintf($url,$token);$result=$this-http_post($url,self::json_encode($data));if($result){$json=json_decode($result,true);if(!$json||!empty($json['errcode'])){$this-errCode=$json['errcode'];$this-errMsg=$json['errmsg'];returnfalse;}return$json;}returnfalse;}/***发送模板消息*@paramunknown$data*@returnboolean|unknown*/publicfunctionsendTemplateMessage($data){$token=$this-getToken();if(empty($token))returnfalse;$url==%s;$url=sprintf($url,$token);$result=$this-http_post($url,self::json_encode($data));if($result){$json=json_decode($result,true);if(!$json||!empty($json['errcode'])){$this-errCode=$json['errcode'];$this-errMsg=$json['errmsg'];returnfalse;}return$json;}returnfalse;}publicfunctiongetFileCache($name){returnS($name);}/***微信api不支持中文转义的json结构*@paramarray$arr*/staticfunctionjson_encode($arr){$parts=array();$is_list=false;//Findoutifthegivenarrayisanumericalarray$keys=array_keys($arr);$max_length=count($arr)-1;if(($keys[0]===0)&&($keys[$max_length]===$max_length)){//Seeifthefirstkeyis0andlastkeyislength-1$is_list=true;for($i=0;$icount($keys);$i++){//Seeifeachkeycorrespondestoitspositionif($i!=$keys[$i]){//Akeyfailsatpositioncheck.$is_list=false;//Itisanassociativearray.break;}}}foreach($arras$key=$value){if(is_array($value)){//Customhandlingforarraysif($is_list)$parts[]=self::json_encode($value);/*:RECURSION:*/else$parts[]=''.$key.':'.self::json_encode($value);/*:RECURSION:*/}else{$str='';if(!$is_list)$str=''.$key.':';//Customhandlingformultipledatatypesif(!is_string($value)&&is_numeric($value)&&$value2000000000)