当前位置:首页 > PHP教程 > php应用 > 列表

php 微信发红包接口测试实例

发布:smiling 来源: PHP粉丝网  添加日期:2015-12-24 14:09:52 浏览: 评论:0 

微信红包功能我相信各位朋友都知道吧,但如果我们要把红包集成到网站那么要如何来做呢?下面小编就来为各位分享一个php 微信发红包接口测试实例,希望文章能够帮助到各位朋友

下面是一个类,使用方法:

  1. $arr['openid']='ojgTTt8oF9VdYcGsJMACHpA-jy1U'
  2.             $arr['hbname']="提现申请"
  3.             $arr['body']="您的提现申请已经成功"
  4.             $arr['fee']=1; 
  5. $comm = new Common_util_pub();           
  6. $re = $comm->sendhongbaoto($arr); 
  7. var_dump($re); 

注意证书位置和 商户后台设置的key需要修改.

  1. <?php 
  2. header("Content-type: text/html; charset=utf-8"); 
  3.  
  4. class Common_util_pub 
  5.       
  6.     /** 
  7. * hbname 红包名称  fee 红包金额 /元  body 内容  openid 微信用户id 
  8. * @param undefined $arr 
  9.  
  10. * @return 
  11. */ 
  12.       
  13. public function sendhongbaoto($arr){ 
  14.  
  15. //$comm = new Common_util_pub(); 
  16. $data['mch_id'] = '120005402'
  17. $data['mch_billno'] = '120005402'.date("Ymd",time()).date("His",time()).rand(1111,9999); 
  18. $data['nonce_str'] = self::createNoncestr(); 
  19. $data['re_openid'] = $arr['openid']; 
  20. $data['wxappid'] = 'wx8axxxxxbac4905'
  21. $data['nick_name'] = $arr['hbname']; 
  22. $data['send_name'] = $arr['hbname']; 
  23. $data['total_amount'] = $arr['fee']*100; 
  24. $data['min_value'] = $arr['fee']*100; 
  25. $data['max_value'] = $arr['fee']*100; 
  26. $data['total_num'] = 1; 
  27. $data['client_ip'] = $_SERVER['REMOTE_ADDR']; 
  28. $data['act_name'] = '测试活动'
  29. $data['remark'] = '备注一下'
  30. $data['wishing'] = $arr['body']; 
  31. if(!$data['re_openid']) {    
  32.      $rearr['return_msg']='缺少用户openid'
  33.      return $rearr
  34. $data['sign'] = self::getSign($data); 
  35. $xml = self::arrayToXml($data); 
  36. //var_dump($xml); 
  37. $url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"
  38. $re = self::wxHttpsRequestPem($xml,$url); 
  39. $rearr = self::xmlToArray($re); 
  40.  
  41.  
  42. return  $rearr
  43.       
  44. function trimString($value
  45.     { 
  46.         $ret = null; 
  47.         if (null != $value)  
  48.         { 
  49.             $ret = $value
  50.             if (strlen($ret) == 0)  
  51.             { 
  52.                 $ret = null; 
  53.             } 
  54.         } 
  55.         return $ret
  56.     } 
  57.       
  58.     /** 
  59.      *  作用:产生随机字符串,不长于32位 
  60.      */ 
  61.     public function createNoncestr( $length = 32 )  
  62.     { 
  63.         $chars = "abcdefghijklmnopqrstuvwxyz0123456789";   
  64.         $str =""
  65.         for ( $i = 0; $i < $length$i++ )  {   
  66.             $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);   
  67.         }   
  68.         return $str
  69.     } 
  70.       
  71.     /** 
  72.      *  作用:格式化参数,签名过程需要使用 
  73.      */ 
  74.     function formatBizQueryParaMap($paraMap$urlencode
  75.     { 
  76.         $buff = ""
  77.         ksort($paraMap); 
  78.         foreach ($paraMap as $k => $v
  79.         { 
  80.             if($urlencode
  81.             { 
  82.                $v = urlencode($v); 
  83.             } 
  84.             //$buff .= strtolower($k) . "=" . $v . "&"; 
  85.             $buff .= $k . "=" . $v . "&"
  86.         } 
  87.         $reqPar
  88.         if (strlen($buff) > 0)  
  89.         { 
  90.             $reqPar = substr($buff, 0, strlen($buff)-1); 
  91.         } 
  92.         return $reqPar
  93.     } 
  94.       
  95.     /** 
  96.      *  作用:生成签名 
  97.      */ 
  98.     public function getSign($Obj
  99.     { 
  100.         foreach ($Obj as $k => $v
  101.         { 
  102.             $Parameters[$k] = $v
  103.         } 
  104.         //签名步骤一:按字典序排序参数 
  105.         ksort($Parameters); 
  106.         $String = $this->formatBizQueryParaMap($Parameters, false); 
  107.         //echo '【string1】'.$String.'</br>'; 
  108.         //签名步骤二:在string后加入KEY 
  109.         $String = $String."&key="."254554sefg4exxxxxxxxs5cds1"// 商户后台设置的key 
  110.         //echo "【string2】".$String."</br>"; 
  111.         //签名步骤三:MD5加密 
  112.         $String = md5($String); 
  113.         //echo "【string3】 ".$String."</br>"; 
  114.         //签名步骤四:所有字符转为大写 
  115.         $result_ = strtoupper($String); 
  116.         //echo "【result】 ".$result_."</br>"; 
  117.         return $result_
  118.     } 
  119.       
  120.     /** 
  121.      *  作用:array转xml 
  122.      */ 
  123. public  function arrayToXml($arr
  124.     { 
  125.         $xml = "<xml>"
  126.         foreach ($arr as $key=>$val
  127.         { 
  128.              if (is_numeric($val)) 
  129.              { 
  130.                 $xml.="<".$key.">".$val."</".$key.">";  
  131.  
  132.              } 
  133.              else 
  134.                 $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";   
  135.         } 
  136.         $xml.="</xml>"
  137.         return $xml;  
  138.     } 
  139.       
  140.     /** 
  141.      *  作用:将xml转为array 
  142.      */ 
  143.     public function xmlToArray($xml
  144.     {        
  145.         //将XML转为array         
  146.         $array_data = json_decode(json_encode(simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA)), true);       
  147.         return $array_data
  148.     } 
  149.  
  150.  
  151.  
  152.       
  153.       
  154.       
  155.      public function wxHttpsRequestPem( $vars,$url$second=30,$aHeader=array()){ 
  156.           
  157.                 $ch = curl_init(); 
  158.                 //超时时间 
  159.                 curl_setopt($ch,CURLOPT_TIMEOUT,$second); 
  160.                 curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); 
  161.                 //这里设置代理,如果有的话 
  162.                 //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98'); 
  163.                 //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); 
  164.                 curl_setopt($ch,CURLOPT_URL,$url); 
  165.                 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 
  166.                 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); 
  167.    
  168.                 //以下两种方式需选择一种 
  169.    
  170.                 //第一种方法,cert 与 key 分别属于两个.pem文件 
  171.                 //默认格式为PEM,可以注释 
  172.                 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); 
  173.                 curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/hongbao/apiclient_cert.pem'); 
  174.                 //默认格式为PEM,可以注释 
  175.                 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); 
  176.                 curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/hongbao/apiclient_key.pem'); 
  177.    
  178.                 curl_setopt($ch,CURLOPT_CAINFO,'PEM'); 
  179.                 curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/hongbao/rootca.pem'); 
  180.    
  181.                 //第二种方式,两个文件合成一个.pem文件 
  182.                 //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem'); 
  183.    
  184.                 ifcount($aHeader) >= 1 ){ 
  185.                         curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); 
  186.                 } 
  187.    
  188.                 curl_setopt($ch,CURLOPT_POST, 1); 
  189.                 curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); 
  190.                 $data = curl_exec($ch); 
  191.                 if($data){ 
  192.                         curl_close($ch); 
  193.                         return $data
  194.                 } 
  195.                 else {  
  196.                         $error = curl_errno($ch); 
  197.                         echo "call faild, errorCode:$error\n";  
  198.                         curl_close($ch); 
  199.                         return false; 
  200.                 } //phpfensi.com 
  201.         } 
  202.       
  203.  
  204.  
  205. ?> 

Tags: php微信发红包 php红包接口

分享到: