ThinkPHP5微信现金红包的开发

ThinkPHP5微信现金红包的开发

内容导读

收集整理的这篇技术教程文章主要介绍了ThinkPHP5微信现金红包的开发,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4629字,纯文字阅读大概需要7分钟

内容图文

这篇文章主要介绍了关于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['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 = "https://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:$errorn";



curl_close($ch);



return false;

}}// ---- 以下是微信现金红包的区域end ---- //

————以上,因为我的代码是写在common.php下的,而common.php是在application目录下的,所以证书放在 application/cert/wxpay/目录之下

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

相关推荐:

关于thinkphp行为的使用

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

以上就是ThinkPHP5微信现金红包的开发的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的ThinkPHP5微信现金红包的开发全部内容,希望文章能够帮你解决ThinkPHP5微信现金红包的开发所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com