杉德支付php代码实现_PHP实现微信支付功能开发代码分享

namespace Wechat\Controller;

useThink\Controller;

/**

* 父类控制器,需要继承

* @file ParentController.class.php

* @author Gary

* @date 2015年8月4日

* @todu

*/

classParentControllerextendsController {

protected$options=array(

'token'=>'',// 填写你设定的key

'encodingaeskey'=>'',// 填写加密用的EncodingAESKey

'appid'=>'',// 填写高级调用功能的app id

'appsecret'=>'',// 填写高级调用功能的密钥

'debug'=> false,

'logcallback'=>''

);

public$errCode= 40001;

public$errMsg="no access";

/**

* 获取access_token

* @return mixed|boolean|unknown

*/

publicfunctiongetToken(){

$cache_token= S('exp_wechat_pay_token');

if(!empty($cache_token)){

return$cache_token;

}

$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=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'];

}

/**

* 发送客服消息

* @param array $data 消息结构{"touser":"OPENID","msgtype":"news","news":{...}}

*/

publicfunctionsendCustomMessage($data){

$token=$this->getToken();

if(empty($token))returnfalse;

$url='https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%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;

}

/**

* 发送模板消息

* @param unknown $data

* @return boolean|unknown

*/

publicfunctionsendTemplateMessage($data){

$token=$this->getToken();

if(empty($token))returnfalse;

$url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%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结构

* @param array $arr

*/

staticfunctionjson_encode($arr) {

$parts=array();

$is_list= false;

//Find out if the given array is a numerical array

$keys=array_keys($arr);

$max_length=count($arr) - 1;

if(($keys[0] === 0) && ($keys[$max_length] ===$max_length)) {//See if the first key is 0 and last key is length - 1

$is_list= true;

for($i= 0;$i

if($i!=$keys[$i]) {//A key fails at position check.

$is_list= false;//It is an associative array.

break;

}

}

}

foreach($arras$key=>$value) {

if(is_array($value)) {//Custom handling for arrays

if($is_list)

$parts[] = self::json_encode ($value);/* :RECURSION: */

else

$parts[] ='"'.$key.'":'. self::json_encode ($value);/* :RECURSION: */

} else{

$str='';

if(!$is_list)

$str='"'.$key.'":';

//Custom handling for multiple data types

if(!is_string($value) &&is_numeric($value) &&$value<2000000000)

$str.=$value;//Numbers

elseif($value=== false)

$str.='false';//The booleans

elseif($value=== true)

$str.='true';

else

$str.='"'.addslashes($value) .'"';//All other things

// :TODO: Is there any more datatype we should be in the lookout for? (Object?)

$parts[] =$str;

}

}

$json= implode (',',$parts);

if($is_list)

return'['.$json.']';//Return numerical JSON

return'{'.$json.'}';//Return associative JSON

}

/**

+----------------------------------------------------------

* 生成随机字符串

+----------------------------------------------------------

* @param int $length 要生成的随机字符串长度

* @param string $type 随机码类型:0,数字+大小写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符

+----------------------------------------------------------

* @return string

+----------------------------------------------------------

*/

staticpublicfunctionrandCode($length= 5,$type= 2){

$arr=array(1 =>"0123456789", 2 =>"abcdefghijklmnopqrstuvwxyz", 3 =>"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 =>"~@#$%^&*(){}[]|");

if($type== 0) {

array_pop($arr);

$string= implode("",$arr);

} elseif($type=="-1") {

$string= implode("",$arr);

} else{

$string=$arr[$type];

}

$count=strlen($string) - 1;

$code='';

for($i= 0;$i

$code.=$string[rand(0,$count)];

}

return$code;

}

/**

* GET 请求

* @param string $url

*/

privatefunctionhttp_get($url){

$oCurl= curl_init();

if(stripos($url,"https://")!==FALSE){

curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($oCurl, CURLOPT_SSLVERSION, 1);//CURL_SSLVERSION_TLSv1

}

curl_setopt($oCurl, CURLOPT_URL,$url);

curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );

$sContent= curl_exec($oCurl);

$aStatus= curl_getinfo($oCurl);

curl_close($oCurl);

if(intval($aStatus["http_code"])==200){

return$sContent;

}else{

returnfalse;

}

}

/**

* POST 请求

* @param string $url

* @param array $param

* @param boolean $post_file 是否文件上传

* @return string content

*/

privatefunctionhttp_post($url,$param,$post_file=false){

$oCurl= curl_init();

if(stripos($url,"https://")!==FALSE){

curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($oCurl, CURLOPT_SSLVERSION, 1);//CURL_SSLVERSION_TLSv1

}

if(is_string($param) ||$post_file) {

$strPOST=$param;

} else{

$aPOST=array();

foreach($paramas$key=>$val){

$aPOST[] =$key."=".urlencode($val);

}

$strPOST= join("&",$aPOST);

}

curl_setopt($oCurl, CURLOPT_URL,$url);

curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt($oCurl, CURLOPT_POST,true);

curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);

$sContent= curl_exec($oCurl);

$aStatus= curl_getinfo($oCurl);

curl_close($oCurl);

if(intval($aStatus["http_code"])==200){

return$sContent;

}else{

returnfalse;

}

}

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部