ThinkPHP5 WeChat 현금 빨간 봉투 개발

不言
풀어 주다: 2023-04-02 19:56:01
원래의
2489명이 탐색했습니다.

이 글은 ThinkPHP5 WeChat 현금 빨간 봉투의 개발을 주로 소개합니다. 이제는 필요한 친구들과 공유할 수 있습니다.

컨트롤러: #🎜 🎜 #

    /**
     * 发放现金红包     */public function payLuckyMoney()
{
    $obj2 = array();    //appid
    $obj2['wxappid'] = config('wx_gzh.appId');    //商户id
    $obj2['mch_id'] = config('wx_sh.mchId');    //组合成28位,根据官方开发文档,可以自行设置
    $obj2['mch_billno'] = config('wx_sh.mchId') . date('YmdHis') . rand(1000, 9999);    // 调用接口的机器IP地址
    $obj2['client_ip'] = $_SERVER['REMOTE_ADDR'];    //接收红包openid
    $obj2['re_openid'] = session('openid');    /* 付款金额设置start,按照概率设置随机发放。
     * 1-200元之间,单位分。这里设置95%概率为1-2元,5%的概率为2-10元     */
    $n = rand(1, 100);    if ($n <= 95) {
        $obj2[&#39;total_amount&#39;] = rand(100, 200);
    } else {
        $obj2[&#39;total_amount&#39;] = rand(200, 1000);
    }    //$obj2[&#39;total_amount&#39;] = 100;
    /* 付款金额设置end */

    // 红包个数
    $obj2[&#39;total_num&#39;] = 1;    // 商户名称
    $obj2[&#39;send_name&#39;] = "小门太";    // 红包祝福语
    $obj2[&#39;wishing&#39;] = "恭喜发财,大吉大利";    // 活动名称
    $obj2[&#39;act_name&#39;] = "小门太认证领红包";    // 备注
    $obj2[&#39;remark&#39;] = "小门太红包";    /* 文档中未说明以下变量,李富林博客中有。注释起来也没问题。不需要。
    $obj2[&#39;min_value&#39;] = $money;
    $obj2[&#39;max_value&#39;] = $money;
    $obj2[&#39;nick_name&#39;] = &#39;小门太红包&#39;;    */

    $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
    $isPay = pay_lucky_money($url, $obj2);
    $res = xml_to_array($isPay);    // 发放成功,把红包数据插入数据库
    if ($res[&#39;return_msg&#39;] == &#39;发放成功&#39;) {        // 发放成功,进行逻辑处理    
    } else {        // 发放失败,返回失败原因
        return $res[&#39;return_msg&#39;];
    }
}
로그인 후 복사

common.php 함수(공통 클래스를 호출할 수도 있음):

// ---- 以下是微信现金红包的区域start ---- ///**
 * 微信发放现金红包核心函数,调用本函数就直接发放红包了。
 * @param $url 现金红包的请求地址
 * @param $obj
 * @return mixed */function pay_lucky_money($url, $obj)
{    //创建随机字符串(32位)
    $obj[&#39;nonce_str&#39;] = str_rand();    //创建签名
    $sign = get_sign($obj, false);    //halt($sign);
    $obj[&#39;sign&#39;] = $sign;    //将签名传入数组
    $postXml = array_to_xml($obj);    //将参数转为xml格式    //halt($postXml);
    $responseXml = curl_post_ssl($url, $postXml);    //提交请求    //halt($responseXml);
    return $responseXml;
}/**
 * @param $arr 生成前面的参数
 * @param $urlencode
 * @return string 返回加密后的签名 */function get_sign($arr, $urlencode)
{
    $buff = "";    //对传进来的数组参数里面的内容按照字母顺序排序,a在前面,z在最后(字典序)    ksort($arr);    foreach ($arr as $k => $v) {        if (null != $v && "null" != $v && "sign" != $k) {    //签名不要转码
            if ($urlencode) {
                $v = urlencode($v);
            }
            $buff .= $k . "=" . $v . "&";
        }
    }    // 去掉末尾符号“&”,其实不用这个if,因为长度肯定大于0
    if (strlen($buff) > 0) {
        $stringA = substr($buff, 0, strlen($buff) - 1);
    }    //签名拼接api
    $stringSignTemp = $stringA . "&key=" . config(&#39;wx_sh.key&#39;);    //签名加密并大写
    $sign = strtoupper(md5($stringSignTemp));    return $sign;
}//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验证【当前文件所在目录/cert/wxpay/】下的两个pem证书文件。    curl_setopt($ch, CURLOPT_SSLCERT, dirname(__FILE__) . DIRECTORY_SEPARATOR .        &#39;cert&#39; . DIRECTORY_SEPARATOR . &#39;wxpay&#39; . DIRECTORY_SEPARATOR . &#39;apiclient_cert.pem&#39;);
    curl_setopt($ch, CURLOPT_SSLKEY, dirname(__FILE__) . DIRECTORY_SEPARATOR .        &#39;cert&#39; . DIRECTORY_SEPARATOR . &#39;wxpay&#39; . DIRECTORY_SEPARATOR . &#39;apiclient_key.pem&#39;);    //curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.    //    &#39;cert&#39;.DIRECTORY_SEPARATOR.&#39;rootca.pem&#39;);    //这个不需要,因为大部分的操作系统都已经内置了rootca.pem证书了,就是常见的CA证书。
    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;
    }
}// ---- 以下是微信现金红包的区域end ---- //
로그인 후 복사

————위, 내 코드는 common.php로 작성되었고 common.php는 애플리케이션 디렉토리에 있으므로 인증서는 application/cert/wxpay/ 디렉토리

아래에 있습니다. 위 내용은 모두의 학습에 도움이 되기를 바랍니다. 중국사이트!

관련 권장 사항:

thinkphp 동작 사용 정보

Windows 서버에서 PHPstudy 사용 PHP 시스템 배포

위 내용은 ThinkPHP5 WeChat 현금 빨간 봉투 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!