微信現金紅包

1.紅包代碼php

<?php
// +----------------------------------------------------------------------
// | 現金紅包
// +----------------------------------------------------------------------
namespace Purewechat\Controller;
use SimpleXMLElement;
class PayController extends BaseController {
	
	/**
	* 普通現金紅包   2017-08-22
	*/
	public function redbagpay($parameter){
		$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
	
		$data = array(
			'nonce_str'			=> createnoncestr(32),				//隨機字符串,不長於32位
			'mch_billno'        => $parameter['mch_billno'],			//商戶訂單號
			'mch_id'			=> $parameter['mchid'],			//商戶號
			'wxappid'			=> $parameter['mch_appid'],	//公衆帳號ID
			'send_name'         => $parameter['send_name'],	//商戶名稱
			're_openid'			=> $parameter['openid'],					//用戶OPENID
			'total_amount'      => $parameter['money'] * 100,   //付款金額,單位爲分
			'total_num'         => 1,   //紅包發放總人數
			'wishing'           => $parameter['wishing'],   //紅包祝福語
			'client_ip'	   		=> get_client_ip(),			//接口的機器Ip地址
			'act_name'		    => $parameter['act_name'],				//活動名稱
			'remark'			=> $parameter['remark'],    //備註
		);
		$data['sign'] = $this -> getsign($data,$parameter);//生成簽名
		$xml = new SimpleXMLElement('<xml></xml>');
		data2xml($xml, $data);
		$data_xml = $xml->asXML();
		
		$result = $this -> curl_post_ssl($url, $data_xml, $second=30,$aHeader=array(),$parameter);
		$result = xmltoarray($result);
		apilog('','wechat','redbagpay',$url, serializeMysql($data), serializeMysql($result));
		return $result;
	}
	
	
	/**
	* 微信企業付款接口-格式化參數,簽名過程須要使用
	*/
	public function curl_post_ssl($url, $vars, $second=30,$aHeader=array(),$parameter){

		$ch = curl_init();
		//超時時間
		curl_setopt($ch,CURLOPT_TIMEOUT,$second);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
		//這裏設置代理,若是有的話
		//curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
		//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
			
		//如下兩種方式需選擇一種
			
		//第一種方法,cert 與 key 分別屬於兩個.pem文件
		//默認格式爲PEM,能夠註釋
		curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');

		curl_setopt($ch,CURLOPT_SSLCERT,getcwd().$parameter['path1']);
		//默認格式爲PEM,能夠註釋
		curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
		curl_setopt($ch,CURLOPT_SSLKEY,getcwd().$parameter['path2']);
		
			
		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;
		}
	}
	
	public function getsign($data,$param){
		foreach($data as $k => $v){
			if($v){
				$Parameters[$k] = $v;
			}
		}
		ksort($Parameters);
		foreach ($Parameters as $k => $v){
			$String .= $k . "=" . $v . "&";
		}
		$String = $String."key=".$param['partnerkey'];
		$String = md5($String);
		$result = strtoupper($String);
			
		return $result;
	}
	

}

2.在須要的地方調用sql

public function index(){
		$configModel = M('WeixinConfig');
		$payModel = M('WeixinPay');
		$userinfo = session('userinfo');
		
		$config = $configModel -> where(array('uid'=>WID)) -> find();
		$pay = $payModel -> where(array('uid'=>WID)) -> find();
		$wxpay = serializeMysql($pay['wxpay'],1);
		
		$ordernumber = createnumber("MallOrder");
		$parameter = array(
				'mch_appid'		=> $config['appid'],	//公衆平臺APPID
				'mchid'			=> $wxpay['mchid'],		//商戶號
				'partnerkey'	=> $wxpay['partnerkey'],	//密鑰
				'money'			=> 1,	
				'openid'		=> $userinfo['openid'],	//用戶OPENID
				'mch_billno'	=> $ordernumber,	//付款訂單號,不能重複
				'send_name'		=> '測試',
				'wishing'		=> 'hello',
				'act_name'		=> '測試活動',
				'remark'		=> 'send',
				'path1'			=> '/Public/Common/apiclient/'.WID.'/apiclient_cert.pem',	//證書1路徑
				'path2'			=> '/Public/Common/apiclient/'.WID.'/apiclient_key.pem'	//證書2路徑
		);

		$Pay = A('Purewechat/Pay');
		$data = $Pay -> redbagpay($parameter);
	}
相關文章
相關標籤/搜索