php微信公众号开发之现金红包


Posted in PHP onApril 16, 2018

本文实例为大家分享了php微信公众号之现金红包的具体代码,供大家参考,具体内容如下

以下有关微信支付中现金红包的开发参考自微信支付开发文档,如下图所示。

php微信公众号开发之现金红包

现金红包,是微信支付商户平台提供的营销工具之一,上线以来深受广大商户与用户的喜爱。商户可以通过本平台向微信支付用户发放现金红包。用户领取红包后,资金到达用户微信支付零钱账户,和零钱包的其他资金有一样的使用出口;若用户未领取,资金将会在24小时后退回商户的微信支付账户中。

以下为本人用于测试微信支付发红包的代码片段,仅供参考。

/*测试微信企业给个人发红包*/ 
public function weixin_red_packet(){ 
  // 请求参数 
  // 随机字符串 
  $data['nonce_str']=$this->get_unique_value(); 
  //签名 
  $data['sign']=""; 
  //商户号,输入你的商户号 
  $data['mch_id']="**********"; 
  //商户订单号,可以按要求自己组合28位的商户订单号 
  $data['mch_billno']=$data['mch_id'].date("ymd")."888888".rand(1000,9999); 
  //公众帐号appid,输入自己的公众号appid 
  $data['wxappid']="*********"; 
  //商户名称 
  $data['send_name']="*******"; 
  //用户openid,输入待发红包的用户openid 
  $data['re_openid']="*********"; 
  //付款金额 
  $data['total_amount']="100"; 
  //红包发放总人数 
  $data['total_num']="1"; 
  //红包祝福语 
  $data['wishing']="********"; 
  //IP地址 
  $data['client_ip']=$_SERVER['LOCAL_ADDR']; 
  //活动名称 
  $data['act_name']="*******"; 
  //备注 
  $data['remark']="没有备注"; 
  //场景ID 
  // $data['send_id']="PRODUCT_5"; 
  //活动信息 
  // $data['risk_info']=""; 
   
  // 生成签名 
  //对数据数组进行处理 
  //API密钥,输入自己的appsecret 
  $appsecret="*********"; 
  $data=array_filter($data); 
  ksort($data); 
  $str=""; 
  foreach($data as $k=>$v){ 
    $str.=$k."=".$v."&"; 
  } 
  $str.="key=".$appsecret; 
  $data['sign']=strtoupper(MD5($str)); 
 
 
  /* 
    发红包操作: 
      1.将请求数据转换成xml 
      2.发送请求 
      3.将请求结果转换为数组 
      4.将请求信息和请求结果录入到数据库中 
      4.判断是否通信成功 
      5.判断是否转账成功 
   */ 
 
 
 
  //发红包接口地址 
  $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; 
 
  //将请求数据由数组转换成xml 
  $xml=$this->arraytoxml($data); 
  //进行请求操作 
  $res=$this->curl($xml,$url); 
  //将请求结果由xml转换成数组 
  $arr=$this->xmltoarray($res); 
 
  //请请求信息和请求结果录入到数据库中 
  // $transfer['partner_trade_no']=$data['partner_trade_no']; 
  // $transfer['request_data']=serialize($data);   
  // $transfer['response_data']=serialize($arr); 
  // if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){ 
  // $transfer['success']=1; 
  // $transfer_res['success']=1; 
  // }else{ 
  // $transfer['success']=0; 
  // $transfer_res['success']=0; 
  // $transfer_res['desc']=$arr['return_msg']; 
  // } 
  // $transfer['add_time']=time(); 
 
  // D("weixin_transfer")->add($transfer); 
  // 输出请求结果数组 
  echo "<pre>"; 
  print_r($arr); 
  exit("weixin_red_packet"); 
} 
 
 
 
// 生成32位唯一随机字符串 
private function get_unique_value(){ 
  $str=uniqid(mt_rand(),1); 
  $str=sha1($str); 
  return md5($str); 
} 
// 将数组转换成xml 
private function arraytoxml($arr){ 
  $xml="<xml>"; 
  foreach($arr as $k=>$v){ 
    $xml.="<".$k.">".$v."</".$k.">"; 
  } 
  $xml.="</xml>"; 
  return $xml; 
} 
// 将xml转换成数组 
private function xmltoarray($xml){ 
  //禁止引用外部xml实体 
  libxml_disable_entity_loader(true); 
  $xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA); 
  $arr=json_decode(json_encode($xmlstring),true); 
  return $arr; 
} 
 
//进行curl操作 
private function curl($param="",$url) { 
  $postUrl = $url; 
  $curlPost = $param; 
  //初始化curl 
  $ch = curl_init();                    
  //抓取指定网页 
  curl_setopt($ch, CURLOPT_URL,$postUrl);          
  //设置header 
  curl_setopt($ch, CURLOPT_HEADER, 0);           
  //要求结果为字符串且输出到屏幕上 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);       
  //post提交方式 
  curl_setopt($ch, CURLOPT_POST, 1);            
  // 增加 HTTP Header(头)里的字段  
  curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);       
  // 终止从服务端进行验证 
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
 
  //这个是证书的位置 
  curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'\cert\apiclient_cert.pem');  
  //这个也是证书的位置 
  curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'\cert\apiclient_key.pem');  
  //运行curl 
  $data = curl_exec($ch);                  
  //关闭curl 
  curl_close($ch); 
  
  return $data; 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
php中http_build_query 的一个问题
Mar 25 PHP
深入解析php中的foreach问题
Jun 30 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
discuz目录文件资料汇总
Dec 30 PHP
smarty中常用方法实例总结
Aug 07 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 PHP
PHP闭包定义与使用简单示例
Apr 13 #PHP
PHP简单实现正则匹配省市区的方法
Apr 13 #PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 #PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 #PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 #PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 #PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 #PHP
You might like
延长phpmyadmin登录时间的方法
2011/02/06 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
thinkphp缓存技术详解
2014/12/09 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
vuex学习之Actions的用法详解
2017/08/29 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
详解vue 命名视图
2019/08/14 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
python自动翻译实现方法
2016/05/28 Python
Python进行数据提取的方法总结
2016/08/22 Python
Python----数据预处理代码实例
2019/03/20 Python
Python assert关键字原理及实例解析
2019/12/13 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
毕业生优秀推荐信
2013/11/26 职场文书
大学军训感言400字
2014/03/11 职场文书
学生保证书范文
2014/04/28 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
Nginx进程调度问题详解
2021/09/25 Servers