php 微信【发放资金、红包、企业付款】方法

 

<?php
class ComPay {
	//证书
	private $apiclient_cert = '';
	private $apiclient_key = '';
	//pay的秘钥值
	private $apikey = "eqweqweqweqweqweq";
	//错误信息
	private $error = '';

	private $mchid = '13123123123';//商户号
	private $mchappid = 'qweqweqweqweqw';//公众号
	private $openid = 'eqweqweqweqweqwe';//接收者openid
	private $amount = 100;//金额
	private $partnertradeno = '';//订单号
	private $spbillcreateip = '';//触发ip
	private $checkname = 'NO_CHECK';//校验要求

	private $sendname = '发送者名字';
	private $wishing = '祝福语';
	private $actname = '活动名称';
	private $remark = '有钱,任性';

	private $totalnum =3;
	private $amttype ='ALL_RAND';

	//裂变红包
	private $api_group = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";
    //普通红包
	private $api_single = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
    //企业支付
	private $api_compay = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
	//约包查询
	private $api_redbag_select = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo";
	//企业支付查询
	private $api_compay_select = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo";
	
	
	/**
	*公用-支付用商户号
	*@var string
	*/
	public function setMchid($mchid){
		$this->mchid = $mchid;
	}
	/**
	*公用-pay的秘钥值
	*@var string
	*/
	public function setApiKey($apikey){
		$this->apikey = $apikey;
	}


	/**
	*企业支付用微信公众号
	*@var string
	*/
	public function setMchAppid($mchappid){
		$this->mchappid = $mchappid;
	}
	/**
	*企业支付接收用户openid
	*@var string
	*/
	public function setOpenid($openid){
		$this->openid = $openid;
	}

	/**
	*企业支付金额
	*@var integer
	*/
	public function setAmount($amount){
		$this->amount = $amount;
	}
	/**
	*企业支付描述
	*@var string
	*/
	public function setDesc($desc){
		$this->remark = $desc;
	}
	
	/**
	*企业支付订单号
	*@var string
	*/
	public function setPartnerTradeNo($partnertradeno){
		$this->partnertradeno = $partnertradeno;
	}
	/**
	*企业支付触发ip
	*@var string
	*/
	public function setSpbillCreateIp($spbillcreateip){
		$this->spbillcreateip = $spbillcreateip;
	}
	/**
	*企业支付校验规则
	*@var string
	*/
	public function setCheckName($checkname){
		$this->checkname = $checkname;
	}

	/**
	*红包支付公众号
	*@var string
	*/
	public function setWxappid($wxappid){
		$this->mchappid = $wxappid;
	}
	/**
	*红包支付订单号
	*@var string
	*/
	public function setMchBillNo($mchbillno){
		$this->partnertradeno = $mchbillno;
	}
	/**
	*红包支付触发ip
	*@var string
	*/
	public function setClientIp($clientip){
		$this->spbillcreateip = $clientip;
	}
	/**
	*红包接收者/裂一变红包的种子接收者
	*@var string
	*/
	public function setReOpenid($reopenid){
		$this->openid = $reopenid;
	}
	/**
	*红包支付金额
	*@var integer
	*/
	public function setTotalAmount($totalamount){
		$this->amount = $totalamount;
	}
	/**
	*红包支付公众号
	*@var string
	*/
	public function setSendName($sendname){
		$this->sendname = $sendname;
	}
	/**
	*红包支祝福语
	*@var string
	*/
	public function setWishing($wishing){
		$this->wishing = $wishing;
	}
	/**
	*红包支付活动名称
	*@var string
	*/
	public function setActName($actname){
		$this->actname = $actname;
	}
	/**
	*红包支付备注信息
	*@var string
	*/
	public function setRemark($remark){
		$this->remark = $remark;
	}
	/**
	*红包支付个数-裂变专用
	*@var string
	*/
	public function setTotalNum($totalnum){
		$this->totalnum = $totalnum;
	}

	public function setAppId($appid){
		$this->mchappid = $appid;
	}
	/**
	*错误反馈
	*@return string
	*/
	public function error(){
		return $this->error;
	}

	/**
	*普通红包支付
	*@return boolean
	*/
	public function RedBag(){
		if(!$this->inited()) return;
		$obj = array();
		$obj['wxappid'] = $this->mchappid;
		$obj['mch_id'] = $this->mchid;
		$obj['mch_billno'] = $this->partnertradeno;
		$obj['client_ip'] = $this->spbillcreateip;
		$obj['re_openid'] = $this->openid;
		$obj['total_amount'] = $this->amount;
		$obj['total_num'] = 1;
		$obj['send_name'] = $this->sendname;
		$obj['wishing'] = $this->wishing;
		$obj['act_name'] = $this->actname;
		$obj['remark'] = $this->remark;
		$url = $this->api_single;
		return $this->Pay($url,$obj);
	}



	/**
	*裂变红包支付
	*@return boolean
	*/
	public function RedBagGroup(){
		if(!$this->inited()) return;
		$obj = array();
		$obj['wxappid'] = $this->mchappid;
		$obj['mch_id'] = $this->mchid;
		$obj['mch_billno'] = $this->partnertradeno;
		$obj['re_openid'] = $this->openid;
		$obj['total_amount'] = $this->amount;
		$obj['total_num'] = $this->totalnum;
		$obj['amt_type'] = $this->amttype;
		$obj['send_name'] = $this->sendname;
		$obj['wishing'] = $this->wishing;
		$obj['act_name'] = $this->actname;
		$obj['remark'] = $this->remark;
		$url = $this->api_single;
		return $this->Pay($url,$obj);
	}
	/**
	*企业支付
	*@return boolean
	*/
	public function ComPay(){
		if(!$this->inited()) return;
		$obj = array();
		$obj['openid'] = $this->openid;
		$obj['amount'] = $this->amount;
		$obj['desc'] = $this->remark;
		$obj['mch_appid'] = $this->mchappid;
		$obj['mchid'] = $this->mchid;
		$obj['partner_trade_no'] = $this->partnertradeno;
		$obj['spbill_create_ip'] = $this->spbillcreateip;
		$obj['check_name'] = $this->checkname;
		$url = $this->api_compay;
		return $this->Pay($url,$obj);
	}
	/**
	*红包查询
	*@return array
	*/
	public function BagSelect(){
		$this->license();
		$obj = array();
		$obj['appid'] = $this->mchappid;
		$obj['mch_id'] = $this->mchid;
		$obj['mch_billno'] = $this->partnertradeno;
		$obj['bill_type'] = 'MCHT';
		$url = $this->api_redbag_select;
		return $this->Pay($url,$obj);
	}
	/**
	*企业支付查询
	*@return array
	*/
	public function ComPaySelect(){
		$this->license();
		$obj = array();
		$obj['appid'] = $this->mchappid;
		$obj['mch_id'] = $this->mchid;
		$obj['partner_trade_no'] = $this->partnertradeno;
		$url = $this->api_compay_select;
		return $this->Pay($url,$obj);
	}

	/**
	*支付前准备
	*@return boolean
	*/
	private function inited(){
		$inited = true;
		$amount = $this->amount;
		if(!is_numeric($amount)){
			$this->error = "金额参数错误";
			$inited = false;
		}elseif($amount<100){
			$this->error = "金额太小";
			$inited = false;
		}elseif($amount>20000){
			$this->error = "金额太大";
			$inited = false;
		}
		if(!$this->partnertradeno){
			$this->partnertradeno = $this->GenBillNo();
		}
		if(!$this->spbillcreateip)
			$this->spbillcreateip = $_SERVER['REMOTE_ADDR'];
		$this->license();
		return $inited;
	}
	/**
	*证书初始化
	*放在同目录 cacert/文件夹下
	*/
	private function license(){
		if(!$this->apiclient_cert) 
			$this->apiclient_cert = dirname(__FILE__)."/cacert/apiclient_cert.pem";
		if(!$this->apiclient_key) 
			$this->apiclient_key = dirname(__FILE__)."/cacert/apiclient_key.pem";
	}

	/**
	*生在订单号
	*@return boolean
	*/
	private function GenBillNo(){
		$rnd_num = array('0','1','2','3','4','5','6','7','8','9');
		$rndstr = "";
		while(strlen($rndstr)<10){
			$rndstr .= $rnd_num[array_rand($rnd_num)];    
		}

		return $this->mchid.date("Ymd").$rndstr;
	}

	/**
	*完成支付操作
	*@url string
	*@obj array
	*@return boolean
	*/
	private function Pay($url,$obj){	
		$obj['nonce_str'] = $this->create_noncestr();
		$sign = $this->getSign($obj);
		$obj['sign'] = $sign;
		$postXml = $this->arrayToXml($obj);
		$responseXml = $this->CurlPostSsl($url,$postXml);
		return $responseXml;
	}
	/**
	*创建随机字串
	*@return string
	*/
	private function create_noncestr($length = 32){
		$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
		$str = '';
		for ($i = 0; $i <$length; $i++){
			$str .= substr($chars,mt_rand(0,strlen($chars)-1),1);
		}
		return $str;
	}
	/**
	*创建签名
	*@return string
	*/
	private function getSign($arr){
		ksort($arr); //按照键名排序
		$sign_raw = '';
		foreach($arr as $k => $v){
			$sign_raw .= $k.'='.$v.'&';
		}
		$sign_raw .= 'key='.$this->apikey;

		return strtoupper(md5($sign_raw));
	}

	/**
     * WXHongBao::genXMLParam()
     * 生成post的参数xml数据包
     * @return $xml
     */
	private function arrayToXml($arr){
		$xml ="<xml>";
		foreach ($arr as $key => $val) {
			if (is_numeric($val)) {
				$xml .= "<".$key.">".$val."</".$key.">";
			}else{
				$xml .= "<".$key."><![CDATA[".$val."]]></".$key.">";
			}
		}
		$xml .= "</xml>";
		return $xml;		
	}

	/**
     * curl提交
     * @return $boolean
     */
	private function CurlPostSsl($url,$xml,$second = 10){
		$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);

		curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
		curl_setopt($ch,CURLOPT_SSLCERT,$this->apiclient_cert);    	
		curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
		curl_setopt($ch,CURLOPT_SSLKEY,$this->apiclient_key);
		curl_setopt($ch,CURLOPT_POST, 1);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
		$data = curl_exec($ch);
		if($data){
			curl_close($ch);            
			$rsxml = simplexml_load_string($data);
			if($rsxml->return_code == 'SUCCESS' ){
				return $data;
			}else{
				$this->error = $rsxml->return_msg;
				return false;    
			}
		}else{ 
			$this->error = curl_errno($ch);
			curl_close($ch);
			return false;
		}
	}





}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值