首页 后端开发 php教程 ThinkPHP5微信现金红包的开发

ThinkPHP5微信现金红包的开发

Jul 07, 2018 pm 02:41 PM
thinkphp5

这篇文章主要介绍了关于ThinkPHP5微信现金红包的开发 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

控制器:

    /**
     * 发放现金红包     */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目录下的,所以证书放在 application/cert/wxpay/目录之下

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

 关于thinkphp行为的使用

使用PHPstudy在Windows服务器下部署PHP系统

以上是ThinkPHP5微信现金红包的开发的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

宝塔部署thinkphp5报错怎么办 宝塔部署thinkphp5报错怎么办 Dec 19, 2022 am 11:04 AM

宝塔部署thinkphp5报错的解决办法:1、打开宝塔服务器,安装php pathinfo扩展并启用;2、配置“.access”文件,内容为“RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]”;3、在网站管理里面,启用thinkphp的伪静态即可。

thinkphp5 url重写不行怎么办 thinkphp5 url重写不行怎么办 Dec 12, 2022 am 09:31 AM

thinkphp5 url重写不行的解决办法:1、查看httpd.conf配置文件中是否加载了mod_rewrite.so模块;2、将AllowOverride None中的None改为All;3、修改Apache配置文件.htaccess为“RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]”保存即可。

怎么去除thinkphp5标题栏icon 怎么去除thinkphp5标题栏icon Dec 20, 2022 am 09:24 AM

去除thinkphp5标题栏icon的方法:1、找到thinkphp5框架public下的favicon.ico文件;2、删除该文件或者选择另一张图片命名改为favicon.ico,并替换原favicon.ico文件即可。

thinkphp5怎么获取请求过来的网址 thinkphp5怎么获取请求过来的网址 Dec 20, 2022 am 09:48 AM

thinkphp5获取请求网址的方法:1、使用“\think\Request”类的“$request = Request::instance();”方法获取当前的url信息;2、通过自带的助手函数“$request->url()”获取包含域名的完整URL地址。

thinkphp5 post得不到值怎么办 thinkphp5 post得不到值怎么办 Dec 06, 2022 am 09:29 AM

thinkphp5 post得不到值是因为TP5是通过strpos函数在Header的content-type值中查找app/json字符串的,其解决办法就是设置Header的content-type值为app/json即可。

thinkphp5提示控制器不存在怎么办 thinkphp5提示控制器不存在怎么办 Dec 06, 2022 am 10:43 AM

thinkphp5提示控制器不存在的解决办法:1、检查对应的控制器里面的命名空间是否写对,修改为正确的命名空间;2、打开相应的tp文件,修改类名即可。

ThinkPHP5怎么查询昨天的数据 ThinkPHP5怎么查询昨天的数据 Dec 05, 2022 am 09:20 AM

ThinkPHP5查询昨天数据的方法:1、打开ThinkPHP5相关文件;2、通过表达式“db('table')->whereTime('c_time', 'yesterday')->select();”查询昨天的数据即可。

thinkphp5报错提示怎么设置 thinkphp5报错提示怎么设置 Dec 07, 2022 am 10:31 AM

thinkphp5设置报错提示的方法:1、进入项目根目录下的public文件夹,打开index.php入口文件;2、查看调试模式开关的注释;3、将“APP_DEBUG”常量的值调整为true即可展示错误信息提示。

See all articles