Maison >développement back-end >tutoriel php >PHP implémente la fonction d'envoi d'enveloppes rouges sur WeChat

PHP implémente la fonction d'envoi d'enveloppes rouges sur WeChat

巴扎黑
巴扎黑original
2018-05-10 15:34:225229parcourir

Cet article présente principalement la fonction d'enveloppe rouge WeChat développée par PHP. Il analyse en détail les étapes pertinentes et les compétences opérationnelles liées à l'utilisation de l'interface WeChat pour implémenter la fonction d'enveloppe rouge Cash en PHP sous forme d'exemples. peut s'y référer

L'exemple de cet article décrit la fonction d'enveloppe rouge WeChat cash développée par PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Développement de l'enveloppe rouge backend-cash du marchand WeChat

sdk

<?php
class wxPay {
  //配置参数信息
  const SHANGHUHAO = "1430998xxx";//商户号
  const PARTNERKEY = "leFyTOXWzUEXxfp47WOu5d9xxxxxx";  //api,商户后台
  //核心支付函数,参数:请求地址和参数
  function pay($url,$obj) {
    $obj[&#39;nonce_str&#39;] = $this->create_noncestr();  //创建随机字符串
    $stringA = $this->create_qianming($obj,false);  //创建签名
    $stringSignTemp = $stringA."&key=leFyTOXWzUEXxfp47WOu5xxxxxx";  //签名后加api
    $sign = strtoupper(md5($stringSignTemp));  //签名加密并大写
    $obj[&#39;sign&#39;] = $sign;  //将签名传入数组
    $postXml = $this->arrayToXml($obj);  //将参数转为xml格式
    var_dump($postXml);
    $responseXml = $this->curl_post_ssl($url,$postXml);  //提交请求
    var_dump($responseXml);
    return $responseXml;
  }
  //生成签名,参数:生成签名的参数和是否编码
  function create_qianming($arr,$urlencode) {
    $buff = "";
    ksort($arr); //对传进来的数组参数里面的内容按照字母顺序排序,a在前面,z在最后(字典序)
    foreach ($arr as $k=>$v) {
      if(null!=$v && "null" != $v && "sign" != $k) {  //签名不要转码
        if ($urlencode) {
          $v = urlencode($v);
        }
        $buff.=$k."=".$v."&";
      }
    }
    if (strlen($buff)>0) {
      $reqPar = substr($buff,0,strlen($buff)-1); //去掉末尾符号“&”
    }
    return $reqPar;
  }
  //生成随机字符串,默认32位
  function create_noncestr($length=32) {
    //创建随机字符
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    $str = "";
    for($i=0;$i<$length;$i++) {
      $str.=substr($chars, mt_rand(0,strlen($chars)-1),1);
    }
    return $str;
  }
  //数组转xml
  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;
  }
  //post请求网站,需要证书
  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文件
    //请确保您的libcurl版本是否支持双向认证,版本高于7.20.1
    curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR.
        &#39;zhengshu&#39;.DIRECTORY_SEPARATOR.&#39;apiclient_cert.pem&#39;);
    curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.
        &#39;zhengshu&#39;.DIRECTORY_SEPARATOR.&#39;apiclient_key.pem&#39;);
    curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.
        &#39;zhengshu&#39;.DIRECTORY_SEPARATOR.&#39;rootca.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;
    }
  }
}

Fichier de certificat :

Veuillez télécharger l'API du commerçant WeChat en arrière-plan, PHP, veuillez utiliser le fichier de certificat php

Fichier de test d'appel à enveloppe rouge WeChat :

<?php
require &#39;wxpay.class.php&#39;;<br><br>//数组参数
$money = 100; //最低1元,单位分
$sender = "晨缘房产";
$obj2 = array();
$obj2[&#39;wxappid&#39;] = ""; //appid
$obj2[&#39;mch_id&#39;] = "";  //商户id
$obj2[&#39;mch_billno&#39;] = "商户id".date(&#39;YmdHis&#39;).rand(1000,9999);  //组合成28位,根据官方开发文档,可以自行设置
$obj2[&#39;client_ip&#39;] = $_SERVER[&#39;REMOTE_ADDR&#39;];
$obj2[&#39;re_openid&#39;] = "oUxO6v26wdyMHThD9kfDW6NB_xbE";  //接收红包openid
$obj2[&#39;total_amount&#39;] = $money;
$obj2[&#39;min_value&#39;] = $money;
$obj2[&#39;max_value&#39;] = $money;
$obj2[&#39;total_num&#39;] = 1;
$obj2[&#39;nick_name&#39;] = $sender;
$obj2[&#39;send_name&#39;] = $sender;
$obj2[&#39;wishing&#39;] = "恭喜发财";
$obj2[&#39;act_name&#39;] = $sender."红包";
$obj2[&#39;remark&#39;] = $sender."红包";
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$wxpay = new wxPay();
$res = $wxpay->pay($url, $obj2);
var_dump($res);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn