微信企业红包开发(php)

微信的开发真的有点麻烦,不是难,就是烦,细节多,东西多,关联多

这里记录下 微信企业红包开发的整个过程(弄完的话  微信支付 也差不多了,代码是 php的)

  1. 申请:这里只说简单的过程
    • 先申请公众服务号
    • 在服务号中申请‘微信支付’(登录公众号平台首页左面有这个菜单),觉得微信在推广移动支付,所以还是很好申请的,关于申请中填写的网站最好做一个购买的演示链接,这样可能更容易下来。
  2. 证书
    • 微信支付申请下来了,那么你有了一个 微信的 商户号和登录密码 (会发邮件给你)
    • 还是从申请微信支付哪里 点到  微信商户登录页面
    • 进去先看 [账户管理]设置证书 安装证书 设置证书的 api秘钥(这个是开发的签名key 自己保存好) 然后下载开发用的证书,反正都在这个大菜单里
    • 下载了证书 放到一个安全点的目录(我是用php开发 linux环境,和window可能有点小区别) 注意这个目录不要是 web服务的目录 不然被别人下载了  呵呵。。
  3. 开发代码整理
    • 老规矩直接找别人的代码,找到一个看起来靠谱的,尼玛 6个文件。。。说真的 看demo的时候 我特别讨厌 封装
    • 下面是我自己整理的代码,实际测试ok的时间 不足整理时间的 十分之一 再次无语(不过还是要谢谢 放代码的兄弟)
    • 注意 所有方法全要 放一个php 类里就可以了 GrantHongbao是入口方法  下面的参数自己换一下
    • 注意 证书目录  替换成你 保存证书的目录
    • </pre></li></ul></ol></p><pre name="code" class="plain">
      public function GrantHongbao(){ //发送红包
              
              $PARTNERKEY = C(‘WEIXINPAYAPIKEY‘);     //商户的签名加密key
              $APPMCHID = C(‘WEIXINMCHID‘);                         //微信商户号
              $WEIXINAPPID = C(‘WEIXINAPPID‘);                       //微信的appid
              $BILLNO = $this->app_mchid.date(‘YmdHis‘).rand(1000, 9999); //订单号
              
              $openid = C(‘KKOPENID‘);                           //收红包的人的openid
              
              $acount = 100;          //发放的金额(单位分)
              
              $url = ‘https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack‘;   //api url
              
              $ip = ‘101.45.174.67‘;  //本机ip
              
              $parames = array();


              $parames["nonce_str"] = $this->great_rand();//随机字符串,丌长于 32 位
              $parames["mch_billno"] = $BILLNO;//订单号
              
              $parames["mch_id"] = $APPMCHID;//商户号
              $parames["wxappid"] = $WEIXINAPPID;
              
              $parames["nick_name"] = ‘红包nick_name‘;//提供方名称
              $parames["send_name"] = ‘KK‘;//红包发送者名称
              $parames["re_openid"] = $openid;//openid
              
              $parames["total_amount"] = $acount;//付款金额,单位分
              $parames["min_value"] = $acount;//最小红包金额,单位分
              $parames["max_value"] = $acount;//最大红包金额,单位分
              $parames["total_num"] = 1;//红包収放总人数
              
              $parames["wishing"] = ‘发个红包真不容易...‘;//红包祝福
              
              $parames["client_ip"] = $ip;//调用接口的机器 Ip 地址
              
              $parames["act_name"] = ‘kk测试红包‘;//活劢名称
              
              $parames["remark"] = ‘快来抢!(没了别来了)‘;//
              
              $parames["sign"] = $this->get_sign($parames, $PARTNERKEY);//参数签名
              
             
              //var_dump($parames);
              
              //转成xml字符串
              $postXml = $this->array2Xmlstring($parames);            
              
              
              
              //echo ‘<br>‘;
              //var_dump($postXml);
              
              //向微信老大发起请求
              $responseXml = $this->curl_post_ssl($url, $postXml);
              
              //echo ‘<br>$responseXml<br>‘;
              var_dump($responseXml);
              
              
              $responseObj = simplexml_load_string($responseXml, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
              
              echo $responseObj->return_code;


          }
          
          /**
           *获取参数列表的签名
           * @param type $parameters
           * @param type $PARTNERKEY:签名的秘钥
           * @return type 
           */
          protected function get_sign($parameters, $PARTNERKEY){
              
              //字典排序
              ksort($parameters);
              
              $unSignParaString = $this->formatQueryParaMap($parameters, false);
              //要签名的字符串
              $signStr = $unSignParaString . "&key=" . $PARTNERKEY;
              
              return strtoupper(md5($signStr));


          }
          /**
           *将参数列表转化为连接字符串
           * @param type $paraMap
           * @param type $urlencode
           * @return type 
           */
          protected function formatQueryParaMap($paraMap, $urlencode){
              $buff = "";
              foreach ($paraMap as $k => $v){
                      if (null != $v && "null" != $v && "sign" != $k) {
                          if($urlencode){
                              $v = urlencode($v);
                          }
                          $buff .= $k . "=" . $v . "&";
                      }
              }
              $reqPar;
              if (strlen($buff) > 0) {
                      $reqPar = substr($buff, 0, strlen($buff)-1);
              }
              return $reqPar;
          }
          /**
           *生成随机数(默认30位长度)
           * @return string 
           */
          protected function great_rand($length = 30){
              $str = ‘1234567890abcdefghijklmnopqrstuvwxyz‘;
              for($i=0;$i<$length;$i++){
                  $j=rand(0,35);
                  $t1 .= $str[$j];
              }
              return $t1;    
          }
          /**
           *数组转xml串
           * @param type $arr
           * @return string 
           */
          protected function array2Xmlstring($arr){
              $xml = "<xml>";
              foreach ($arr as $key=>$val)
              {
              if (is_numeric($val))
              {
              $xml.="<".$key.">".$val."</".$key.">"; 


              }
              else{
              $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
             
              }
              $xml.="</xml>";
              return $xml; 
          }
          /**
           * 访问微信接口
           * @param type $url
           * @param type $vars
           * @param type $second
           * @param type $aHeader
           * @return boolean 
           */
          protected function curl_post_ssl($url, $vars, $second=30,$aHeader=array()){
              $ch = curl_init();
              //超时时间
              curl_setopt($ch,CURLOPT_TIMEOUT,$second);
              curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
              //这里设置代理,如果有的话
              curl_setopt($ch,CURLOPT_URL,$url);
              curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
              curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);


              //cert 与 key 分别属于两个.pem文件
              curl_setopt($ch,CURLOPT_SSLCERT,‘证书保存路径‘.‘apiclient_cert.pem‘);
              curl_setopt($ch,CURLOPT_SSLKEY,‘证书保存路径‘.‘apiclient_key.pem‘);
              curl_setopt($ch,CURLOPT_CAINFO,‘证书保存路径‘.‘rootca.pem‘);




              if( count($aHeader) >= 1 ){
                      curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
              }


              curl_setopt($ch,CURLOPT_POST, 1);
              curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
              $data = curl_exec($ch);
              if($data){
                      curl_close($ch);
                      return $data;
              }
              else { 
                      $error = curl_errno($ch);
                      curl_close($ch);
                      return $error;
              }
          }
      
      

微信企业红包开发(php)

上一篇:mysql in 排序 也可以按in里面的顺序来排序


下一篇:微信“为盲胞读书”项目上线“团体领读”新功能