PHP微信红包API接口的代码分析
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,这篇文章主要讲解了"PHP微信红包API接口的代码分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP微信红包API接口的代码分析"吧!首先给大家
千家信息网最后更新 2024年11月17日PHP微信红包API接口的代码分析
这篇文章主要讲解了"PHP微信红包API接口的代码分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP微信红包API接口的代码分析"吧!
首先给大家看一看这个表格:
根据微信高级红包接口,开发PHP版本的API接口,现在进行主要代码分析。
红包接口调用请求代码,所有请求参数为必填参数与文档对应:
class Wxapi { private $app_id = 'wxXXXXXXXXXXXX'; //公众账号appid,首先申请与之配套的公众账号 private $app_secret = 'XXXXXXXXXXXXXXXXXXXXXXXX';//公众号secret,用户获取用户授权token private $app_mchid = 'XXXXXXXX';//商户号id function __construct(){ //do sth here.... } /** * 微信支付 * @param string $openid 用户openid */ public function pay($re_openid) { include_once('WxHongBaoHelper.php'); $commonUtil = new CommonUtil(); $wxHongBaoHelper = new WxHongBaoHelper(); $wxHongBaoHelper->setParameter("nonce_str", $this->great_rand());//随机字符串,丌长于 32 位 $wxHongBaoHelper->setParameter("mch_billno", $this->app_mchid.date('YmdHis').rand(1000, 9999));//订单号 $wxHongBaoHelper->setParameter("mch_id", $this->app_mchid);//商户号 $wxHongBaoHelper->setParameter("wxappid", $this->app_id); $wxHongBaoHelper->setParameter("nick_name", '红包');//提供方名称 $wxHongBaoHelper->setParameter("send_name", '红包');//红包发送者名称 $wxHongBaoHelper->setParameter("re_openid", $re_openid);//相对于医脉互通的openid $wxHongBaoHelper->setParameter("total_amount", 100);//付款金额,单位分 $wxHongBaoHelper->setParameter("min_value", 100);//最小红包金额,单位分 $wxHongBaoHelper->setParameter("max_value", 100);//最大红包金额,单位分 $wxHongBaoHelper->setParameter("total_num", 1);//红包収放总人数 $wxHongBaoHelper->setParameter("wishing", '感谢您参与红包派发活动,祝您新年快乐!');//红包祝福诧 $wxHongBaoHelper->setParameter("client_ip", '127.0.0.1');//调用接口的机器 Ip 地址 $wxHongBaoHelper->setParameter("act_name", '红包活动');//活劢名称 $wxHongBaoHelper->setParameter("remark", '快来抢!');//备注信息 $postXml = $wxHongBaoHelper->create_hongbao_xml(); $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack'; $responseXml = $wxHongBaoHelper->curl_post_ssl($url, $postXml); //用作结果调试输出 //echo htmlentities($responseXml,ENT_COMPAT,'UTF-8'); $responseObj = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA); return $responseObj->return_code; }
获取随机字符串方法:
/** * 生成随机数 */ public function great_rand(){ $str = '1234567890abcdefghijklmnopqrstuvwxyz'; for($i=0;$i<30;$i++){ $j=rand(0,35); $t1 .= $str[$j]; } return $t1; }
签名算法:
/**例如:appid: wxd111665abv58f4fmch_id: 10000100device_info: 1000Body: testnonce_str: ibuaiVcKdpRxkhJA第一步:对参数按照 key=value 的格式,并按照参数名 ASCII 字典序排序如下:stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA";第二步:拼接支付密钥:stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d"sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7"*/protected function get_sign(){ define('PARTNERKEY',"QSRXXXXXXXXXXXXXXXXXXXXX"); try { if (null == PARTNERKEY || "" == PARTNERKEY ) { throw new SDKRuntimeException("密钥不能为空!" . "
"); } if($this->check_sign_parameters() == false) { //检查生成签名参数 throw new SDKRuntimeException("生成签名参数缺失!" . "
"); } $commonUtil = new CommonUtil(); ksort($this->parameters); $unSignParaString = $commonUtil->formatQueryParaMap($this->parameters, false); $md5SignUtil = new MD5SignUtil(); return $md5SignUtil->sign($unSignParaString,$commonUtil->trimString(PARTNERKEY)); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } }
CURL请求以及发送证书:
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.'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem'); curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem'); curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'rootca.pem'); 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; }}
入口文件:
@require "pay.php";//获取用户信息$get = $_GET['param'];$code = $_GET['code'];//判断code是否存在if($get=='access_token' && !empty($code)){ $param['param'] = 'access_token'; $param['code'] = $code; $packet = new Packet(); //获取用户openid信息 $userinfo = $packet->_route('userinfo',$param); if(empty($userinfo['openid'])){ exit("NOAUTH"); } //调取支付方法 $packet->_route('wxpacket',array('openid'=>$userinfo['openid']));}else{ $packet->_route('userinfo');}
感谢各位的阅读,以上就是"PHP微信红包API接口的代码分析"的内容了,经过本文的学习后,相信大家对PHP微信红包API接口的代码分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
红包
接口
代码
参数
分析
用户
信息
公众
单位
名称
版本
金额
学习
支付
生成
内容
商户
字符
字符串
密钥
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发公司招聘政审吗
测试数据库路径
怎么设置网络安全等级
带gpu的服务器
速8酒店里的网络安全吗
golabel数据库
服务器维修不小心损坏备件
一个数据库可以管理多个数据库吗
教育部关于网络安全进校园
常州个人软件开发诚信合作
什么是数据库分页技术
网络安全手抄报三年级字少
r按照条件筛选数据库
大学生软件开发项目报告
软件开发工程师注意事项
小程序无服务器
我的世界手机服务器租
2016年网络安全知识试题
如何利用Ai交互软件开发课程
数据库孪生管理平台技术服务
网络安全工作算晚吗
自己查tcga数据库
北京协和医院网络技术
网络安全 加密技术
sql 数据库表sum
手机服务器地址怎样看
如何用多进程查询数据库
app.config 数据库
软件开发调研表
无法连接命运2服务器错误代码