微信发送红包示例(php)-阿里云开发者社区

开发者社区> ykmimi.com> 正文

微信发送红包示例(php)

简介: 微信红包接口 微信红包是微信支付推出的一款基于微信客户端的免费服务应用,微信红包以微信支付 为核心安全保障,为广大用户提供安全,快捷的移劢支付服务。   请求URL 现金红包 https://api.mch.
+关注继续查看

微信红包接口

微信红包是微信支付推出的一款基于微信客户端的免费服务应用,微信红包以微信支付

为核心安全保障,为广大用户提供安全,快捷的移劢支付服务。

 

请求URL

现金红包

https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack

 

裂变红包

https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack

 

企业付款

https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers

请求的参数:

3924735281.png

以现金红包为例:请求参数示例:

 <xml>
	<act_name>123123</act_name>
	<client_ip>
		<![CDATA[127.0.0.1]]>
	</client_ip>
	<mch_billno>
		1281216601201609200000000000
	</mch_billno>
	<mch_id>1281216601</mch_id>
	<nonce_str>
		<![CDATA[CgSaD2zSG6ds2r2ulSuSmj3zKUXSukSS]]>
	</nonce_str>
	<re_openid>
		<![CDATA[okzyKwbDW-d7Spc0M112zWZjaa3E]]>
	</re_openid>
	<remark>
		1231
	</remark>
	<send_name>
		<![CDATA[haha哈]]>
	</send_name>
	<total_amount>1.00</total_amount>
	<total_num>1</total_num>
	<wishing>
		<![CDATA[祝您好运]]>
	</wishing>
	<wxappid>
		<![CDATA[wxa316d1ce30f2c952]]>
	</wxappid>
	<sign>
		<![CDATA[52F30DAD7E0ADFA842627179502BC2F3]]>
	</sign>
</xml>

核心代码如下:

$config里面包含了必须的appid,和其他参数,可以看上图详情。只需调用yiy_send(要发送给谁的(openid),金额,配置参数)
/*随机字符串*/
	private function random($length, $numeric = FALSE) {
		$seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
		$seed = $numeric ? (str_replace('0', '', $seed) . '012340567890') : ($seed . 'zZ' . strtoupper($seed));
		if ($numeric) {
			$hash = '';
		} else {
			$hash = chr(rand(1, 26) + rand(0, 1) * 32 + 64);
			$length--;
		}
		$max = strlen($seed) - 1;
		for ($i = 0; $i < $length; $i++) {
			$hash .= $seed{mt_rand(0, $max)};
		}
		return $hash;
	}

	//发送红包
	private function yiy_send($openid,$price,$config) {
		$uniacid = 2;
		$api = $config['api'];
		$activity = $config['activity'];
		$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
		$pars = array();
		$pars['nonce_str'] = $this->random(32);
		$pars['mch_billno'] = $api['mchid'] . date('YmdHis');
		$pars['mch_id'] = $api['mchid'];
		$pars['wxappid'] = $api['appid'];
		$pars['send_name'] = $activity['provider'];
		$pars['re_openid'] = $openid;
		$pars['total_amount'] = $price*100;
		$pars['total_num'] = 1;
		$pars['wishing'] = $activity['wish'];
		$pars['client_ip'] = $api['ip'];
		$pars['act_name'] = $activity['title'];
		$pars['remark'] = $activity['remark'];
	
		ksort($pars);
		$string1 = '';
		foreach($pars as $k => $v) {
			$string1 .= "{$k}={$v}&";
		}
		$string1 .= "key={$api['password']}";
		$pars['sign'] = strtoupper(md5($string1));
		$xml = $this->array2xml($pars);
		define(M_PATH, dirname(__FILE__). '/./../../../../addons/ly_huilife/');
		$extras = array();
		//此处为证书位置(绝对路径),改成适合自己的,我这里放的比较那啥。。。。忽略///
		$extras['CURLOPT_CAINFO'] = M_PATH . '/cert/rootca.pem.' . $uniacid;
		$extras['CURLOPT_SSLCERT'] = M_PATH . '/cert/apiclient_cert.pem.' . $uniacid;
		$extras['CURLOPT_SSLKEY'] = M_PATH . '/cert/apiclient_key.pem.' . $uniacid;
		$procResult = null;
		$resp = $this->CurlPostSsl($url, $xml, $extras);
		return $resp;
	}

	//提交
	private function CurlPostSsl($url,$xml,$extras){
		$ch = curl_init();   
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);	
		curl_setopt($ch,CURLOPT_TIMEOUT,60);
		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);
		curl_setopt($ch, CURLOPT_SSLVERSION, 1);
		curl_setopt($ch,CURLOPT_SSLCERT,$extras['CURLOPT_SSLCERT']);    	
		curl_setopt($ch,CURLOPT_SSLKEY,$extras['CURLOPT_SSLKEY']);
		curl_setopt($ch,CURLOPT_CAINFO,$extras['CURLOPT_CAINFO']);
		curl_setopt($ch,CURLOPT_POST, 1);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
		$data = curl_exec($ch);
		var_dump($data);
		if($data){
			curl_close($ch);            
			$rsxml = simplexml_load_string($data);
			if($rsxml->return_code == 'SUCCESS' && $rsxml->result_code == 'SUCCESS'){
				return array('code'=>1,'msg'=>'发放成功');
			}else{
			//这里你可以获取,并返回详细失败信息,我这里都用这种方式返回了。
				return array('code'=>0,'msg'=>'#1未知错误,稍后再试');    
			}
		}else{ 
			$error = curl_errno($ch);
			curl_close($ch);
			return array('code'=>0,'msg'=>$error );
		}
	}

	function array2xml($arr, $level = 1) {
		$s = $level == 1 ? "<xml>" : '';
		foreach ($arr as $tagname => $value) {
			if (is_numeric($tagname)) {
				$tagname = $value['TagName'];
				unset($value['TagName']);
			}
			if (!is_array($value)) {
				$s .= "<{$tagname}>" . (!is_numeric($value) ? '<![CDATA[' : '') . $value . (!is_numeric($value) ? ']]>' : '') . "</{$tagname}>";
			} else {
				$s .= "<{$tagname}>" . array2xml($value, $level + 1) . "</{$tagname}>";
			}
		}
		$s = preg_replace("/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/", ' ', $s);
		return $level == 1 ? $s . "</xml>" : $s;
	}

正确的返回结果是:

QQ图片20160920230430.pngQQ截图20160920224924.png

注意:传入的金额是以分为单位,比如1元,要写成100,不然红包过小会失败的(红包大于等于1元,小于等于200元),比如这样返回:

<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[每个红包的平均金额必须在1.00元到200.00元之间.]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[MONEY_LIMIT]]></err_code>
<err_code_des><![CDATA[每个红包的平均金额必须在1.00元到200.00元之间.]]></err_code_des>
<mch_billno><![CDATA[1281216601201609200000000000]]></mch_billno>
<mch_id><![CDATA[1281216601]]></mch_id>
<wxappid><![CDATA[wxa316d1ce30f2c952]]></wxappid>
<re_openid><![CDATA[okzyKwbDW-d7Spc0M112zWZjaa3E]]></re_openid>
<total_amount>1</total_amount>
</xml>

更详细的文档:官方pdf:https://pay.weixin.qq.com/helper/cashredopenapi_V2.pdf

将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHPMailer安装及简单实例(PHP发送邮件不用Smtp类)
PHPMailer安装及简单实例 [ 2006-11-29 14:37:49 | Author: songzi ] Font Size: Large | Medium | Small PHPMailer是一个用PHP写的用于邮件发送的类,有点像Jmail,相信很多新手和我一样,开始很茫然,不知道怎么安装,查找了一下,发现这方面的资料真的少之又少,一个文章被转载千百次,一搜索全是同一个内容,真不知道说什么好,其实打开安装里的readme就一目了然了,闲话少说,安装其实很简单。
1261 0
PHP发送邮件。
第三方类库: ①、email.class.php。 ②、phpmailer:https://github.com/PHPMailer/PHPMailer。   PHPMailer发送邮件”SMTP 错误:无法连接到 SMTP 主机“:http://www.
628 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4502 0
php 发送超大数据处理
set_time_limit(0);//设置永不超时 ignore_user_abort(); //设置客户端断开,继续处理 //总数 $allusercount= $this->gamedb_model->query_onerow(); $allcoun...
541 0
nginx模块开发之“将磁盘文件作为包体发送”
      上篇博文你是否动手实践了,如果没有,很遗憾,接下来的练习你可能无法进行。本篇博文与上篇博文最大的区别就是在ngx_http_test_handler函数的实现,这里我们将要做的是将磁盘中的一个文件作为包体,发送到客户端显示,好了,看代码:       细心的你,看出哪里不同了吗?       以下是我的测试结果,我通过浏览器显示服务端磁盘文件的内容,如下:      假如您和我一样同为nginx服务器软件的原理感兴趣,不妨努力学习一下,有句话叫“临渊羡鱼,退而结网”。
729 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
444 0
营销活动送红包之触发现金红包活动(alipay.marketing.campaign.cash.trigger)-java版
说明: 本帖是测试营销活动送红包的触发现金红包活动接口,本帖是使用沙箱环境测试的,仅供参考!! 是否需要签约:需要,【如何签约】  是否支持沙箱环境:支持 接口文档:查看  sdk下载:下载  营销活动送红包沙箱Java版demo:download:营销活动送红包Java版.
393 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3229 0
php开发微信支付获取用户地址
使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能。 微信商城中,使用微信支付获取用户的收货地址,可以省略用户输入地址信息的繁复流程,提高用户体验。
821 0
+关注
101
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载