Usage examples of the WeChat red envelope sending interface in PHP version

墨辰丷
Release: 2023-03-28 21:26:01
Original
1560 people have browsed it

This article mainly introduces the usage of the WeChat red envelope sending interface in the PHP version, and analyzes the related usage skills of PHP's WeChat red envelope sending interface in the form of examples. Friends in need can refer to the

WeChat red envelope function I believe All my friends know it, but if we want to integrate red envelopes into the website, how do we do it? Here the editor will share with you a test example of the php WeChat red envelope sending interface. I hope the article can help all my friends

The following is a class, how to use:

$arr['openid']='ojgTTt8oF9VdYcGsJMACHpA-jy1U';
      $arr['hbname']="提现申请";
      $arr['body']="您的提现申请已经成功";
      $arr['fee']=1;
$comm = new Common_util_pub();
$re = $comm->sendhongbaoto($arr);
var_dump($re);
Copy after login

Note that the certificate location and the key set in the merchant backend need to be modified.

<?php
header("Content-type: text/html; charset=utf-8");
class Common_util_pub
{
  /**
* hbname 红包名称 fee 红包金额 /元 body 内容 openid 微信用户id
* @param undefined $arr
*
* @return
*/
public function sendhongbaoto($arr){
//$comm = new Common_util_pub();
$data[&#39;mch_id&#39;] = &#39;120005402&#39;;
$data[&#39;mch_billno&#39;] = &#39;120005402&#39;.date("Ymd",time()).date("His",time()).rand(1111,9999);
$data[&#39;nonce_str&#39;] = self::createNoncestr();
$data[&#39;re_openid&#39;] = $arr[&#39;openid&#39;];
$data[&#39;wxappid&#39;] = &#39;wx8axxxxxbac4905&#39;;
$data[&#39;nick_name&#39;] = $arr[&#39;hbname&#39;];
$data[&#39;send_name&#39;] = $arr[&#39;hbname&#39;];
$data[&#39;total_amount&#39;] = $arr[&#39;fee&#39;]*100;
$data[&#39;min_value&#39;] = $arr[&#39;fee&#39;]*100;
$data[&#39;max_value&#39;] = $arr[&#39;fee&#39;]*100;
$data[&#39;total_num&#39;] = 1;
$data[&#39;client_ip&#39;] = $_SERVER[&#39;REMOTE_ADDR&#39;];
$data[&#39;act_name&#39;] = &#39;测试活动&#39;;
$data[&#39;remark&#39;] = &#39;备注一下&#39;;
$data[&#39;wishing&#39;] = $arr[&#39;body&#39;];
if(!$data[&#39;re_openid&#39;]) {
   $rearr[&#39;return_msg&#39;]=&#39;缺少用户openid&#39;;
   return $rearr;
}
$data[&#39;sign&#39;] = self::getSign($data);
$xml = self::arrayToXml($data);
//var_dump($xml);
$url ="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$re = self::wxHttpsRequestPem($xml,$url);
$rearr = self::xmlToArray($re);
return $rearr;
}
function trimString($value)
  {
    $ret = null;
    if (null != $value)
    {
      $ret = $value;
      if (strlen($ret) == 0)
      {
        $ret = null;
      }
    }
    return $ret;
  }
  /**
   * 作用:产生随机字符串,不长于32位
   */
  public function createNoncestr( $length = 32 )
  {
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    $str ="";
    for ( $i = 0; $i < $length; $i++ ) {
      $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
    }
    return $str;
  }
  /**
   * 作用:格式化参数,签名过程需要使用
   */
  function formatBizQueryParaMap($paraMap, $urlencode)
  {
    $buff = "";
    ksort($paraMap);
    foreach ($paraMap as $k => $v)
    {
      if($urlencode)
      {
        $v = urlencode($v);
      }
      //$buff .= strtolower($k) . "=" . $v . "&";
      $buff .= $k . "=" . $v . "&";
    }
    $reqPar;
    if (strlen($buff) > 0)
    {
      $reqPar = substr($buff, 0, strlen($buff)-1);
    }
    return $reqPar;
  }
  /**
   * 作用:生成签名
   */
  public function getSign($Obj)
  {
    foreach ($Obj as $k => $v)
    {
      $Parameters[$k] = $v;
    }
    //签名步骤一:按字典序排序参数
    ksort($Parameters);
    $String = $this->formatBizQueryParaMap($Parameters, false);
    //echo &#39;【string1】&#39;.$String.&#39;</br>&#39;;
    //签名步骤二:在string后加入KEY
    $String = $String."&key="."254554sefg4exxxxxxxxs5cds1"; // 商户后台设置的key
    //echo "【string2】".$String."</br>";
    //签名步骤三:MD5加密
    $String = md5($String);
    //echo "【string3】 ".$String."</br>";
    //签名步骤四:所有字符转为大写
    $result_ = strtoupper($String);
    //echo "【result】 ".$result_."</br>";
    return $result_;
  }
  /**
   * 作用:array转xml
   */
  public function arrayToXml($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;
  }
  /**
   * 作用:将xml转为array
   */
  public function xmlToArray($xml)
  {
    //将XML转为array
    $array_data = json_decode(json_encode(simplexml_load_string($xml, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA)), true);
    return $array_data;
  }
   public function wxHttpsRequestPem( $vars,$url, $second=30,$aHeader=array()){
        $ch = curl_init();
        //超时时间
        curl_setopt($ch,CURLOPT_TIMEOUT,$second);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
        //这里设置代理,如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, &#39;10.206.30.98&#39;);
        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        //以下两种方式需选择一种
        //第一种方法,cert 与 key 分别属于两个.pem文件
        //默认格式为PEM,可以注释
        curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
        curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).&#39;/hongbao/apiclient_cert.pem&#39;);
        //默认格式为PEM,可以注释
        curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
        curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).&#39;/hongbao/apiclient_key.pem&#39;);
        curl_setopt($ch,CURLOPT_CAINFO,&#39;PEM&#39;);
        curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).&#39;/hongbao/rootca.pem&#39;);
        //第二种方式,两个文件合成一个.pem文件
        //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/all.pem&#39;);
        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);
            echo "call faild, errorCode:$error\n";
            curl_close($ch);
            return false;
        }
    }
}
?>
Copy after login

Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.

Related recommendations:

php Detailed explanation of the four methods of parsing xml

in PHP Summary of password encryption solutions

php array_multisort Detailed explanation and examples of sorting arrays

The above is the detailed content of Usage examples of the WeChat red envelope sending interface in PHP version. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!