首页 > 开发 > PHP > 正文

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

2024-05-04 22:00:26
字体:大 中 小
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表