首页 > 编程 > PHP > 正文

ThinkPHP5微信现金红包的开发

2020-03-22 18:18:57
字体:
来源:转载
供稿:网友
这篇文章主要介绍了关于ThinkPHP5微信现金红包的开发 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

控制器:

 /** * 发放现金红包 */html' target='_blank'>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[ total_amount ] = rand(100, 200); } else { $obj2[ total_amount ] = rand(200, 1000); } //$obj2[ total_amount ] = 100; /* 付款金额设置end */ // 红包个数 $obj2[ total_num ] = 1; // 商户名称 $obj2[ send_name ] = 小门太 // 红包祝福语 $obj2[ wishing ] = 恭喜发财,大吉大利 // 活动名称 $obj2[ act_name ] = 小门太认证领红包 // 备注 $obj2[ remark ] = 小门太红包 /* 文档中未说明以下变量,李富林博客中有。注释起来也没问题。不需要。 $obj2[ min_value ] = $money; $obj2[ max_value ] = $money; $obj2[ nick_name ] = 小门太红包 */ $url = http://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack  $isPay = pay_lucky_money($url, $obj2); $res = xml_to_array($isPay); // 发放成功,把红包数据插入数据库 if ($res[ return_msg ] == 发放成功 ) { // 发放成功,进行逻辑处理  } else { // 发放失败,返回失败原因 return $res[ return_msg }

common.php函数(你也可以常见一个类来进行调用):

// ---- 以下是微信现金红包的区域start ---- ///** * 微信发放现金红包核心函数,调用本函数就直接发放红包了。 * @param $url 现金红包的请求地址 * @param $obj * @return mixed */function pay_lucky_money($url, $obj){ //创建随机字符串(32位) $obj[ nonce_str ] = str_rand(); //创建签名 $sign = get_sign($obj, false); //halt($sign); $obj[ sign ] = $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( wx_sh.key //签名加密并大写 $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 . cert . DIRECTORY_SEPARATOR . wxpay . DIRECTORY_SEPARATOR . apiclient_cert.pem  curl_setopt($ch, CURLOPT_SSLKEY, dirname(__FILE__) . DIRECTORY_SEPARATOR . cert . DIRECTORY_SEPARATOR . wxpay . DIRECTORY_SEPARATOR . apiclient_key.pem //curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR. // cert .DIRECTORY_SEPARATOR. rootca.pem //这个不需要,因为大部分的操作系统都已经内置了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教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表