微信公众号开发---微信企业付款给个人

原创 2017年02月06日 11:28:17

   以下有关微信支付中企业付款的介绍及编码参考自微信支付开发文档,网址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1,如图所示




     企业付款,提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款。

    企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款的功能。
    比如目前的保险行业向客户退保、给付、理赔。

   以下是PHP用于实现企业付款业务的代码片段,仅供参考。

/*微信企业付款给个人*/
<!--具体细节参考微信支付开发文档-->
<!--参数 $openid个人openid,$re_user_name个人真实姓名,$amount付款金额,$partner_trade_no商户订单号,$desc描述-->
<!--返回 如果付款成功,返回true,否则返回false-->
private function weixin_transfer_money($openid,$re_user_name,$amount,$partner_trade_no,$desc){
	//请求参数
	//公众号appid(字段名)--mch_appid(变量名)--1(必填)
	//输入你的公众号appid
	$data['mch_appid']="**************";  
	
	//商户号--mchid--1
	//输入你的商户号
	$data['mchid']="*************";
	
	//设备号--device_info--0
	//随机字符串--nonce_str--1
	$data['nonce_str']=$this->get_unique_value();

	//签名--sign--1
	$data['sign']="";

	//商户订单号--partner_trade_no--1
	$data['partner_trade_no']=$partner_trade_no;

	//用户openid--openid--1
	$data['openid']=$openid;
	
	//校验用户姓名选项--check_name--1
	$data['check_name']="OPTION_CHECK";
	
	//收款用户姓名--re_user_name--0
	$data['re_user_name']=$re_user_name;

	//金额--amount--1
	$data['amount']=$amount;

	//企业付款描述信息--desc--1
	$data['desc']=$desc;

	//IP地址--spbill_create_ip--1
	$data['spbill_create_ip']=$_SERVER['LOCAL_ADDR'];

	//生成签名
	//对数据数组进行处理
	//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.将请求信息和请求结果录入到数据库中
			5.判断是否通信成功
			6.判断是否付款成功
	 */



	//企业付款接口地址
	$url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";

	//1.将请求数据由数组转换成xml
	$xml=$this->arraytoxml($data);
	//2.进行请求操作
	$res=$this->curl($xml,$url);
	//3.将请求结果由xml转换成数组
	$arr=$this->xmltoarray($res);

	//4.将请求信息和请求结果录入到数据库中,可以根据自己的需要进行处理,$arr是返回的结果数组
	$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"){
	    //5. 判断是否通讯成功 6.判断是否付款成功
		$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);
    
	return $transfer_res;
}

// 生成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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

微信支付-企业付款到个人详解

微信支付-企业付款到个人企业付款实现企业向个人付款,实现付款到用户零钱。项目实现了企业付款到个人和企业付款个人账单查询。代码包括签名实现,双向证书验证,付款功能等支付流程付款功能 企业付款到授权用户...
  • fengshizty
  • fengshizty
  • 2016年11月17日 19:05
  • 13181

Java微信支付-微信企业付款到个人

  • 2016年11月17日 19:22
  • 28KB
  • 下载

微信支付商户平台,企业付款,企业向个人付款接口总结

这几天做项目,有个需求,是微信用户需要把公众号中赚的钱提现,于是查资料找到了微信商户平台中的高级业务:企业付款。 官方文档:https://pay.weixin.qq.com/wiki/doc/ap...
  • u010533511
  • u010533511
  • 2015年09月14日 22:58
  • 30054

微信公众号付款asp.net版本

ASP.net 微信公众号支付
  • a15828444995
  • a15828444995
  • 2016年11月23日 08:55
  • 1184

微信公众号开启企业付款到用户

将网址https://pay.weixin.qq.com/index.php/extend/product/lists?tid=3 改为   https://pay.weixin.qq.com/...
  • juner_ge
  • juner_ge
  • 2017年01月06日 17:26
  • 3802

微信公众号开发——现金红包、企业付款

先说现金红包微信商户平台配置设置基本就是如上图核心代码普通红包 /// /// 普通红包 目前支持向指定微信用户的openid发放指定金额红包 /// ...
  • u014742815
  • u014742815
  • 2016年10月21日 09:08
  • 2420

微信支付企业付款至银行卡功能说明

微信支付已上线企业付款至银行卡功能。商户可以将商户号余额付款至指定的收款银行账户。通过指定收款银行账户户名、卡号,以及收款银行信息即可实现付款。功能目前为灰度开放,已灰度新资金流直连普通商户及普通受理...
  • paymm
  • paymm
  • 2017年12月28日 23:45
  • 741

微信支付之企业付款

企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款的功能。 比如目前的保险行业向客户退保、给付、理赔。...
  • sinat_35861727
  • sinat_35861727
  • 2017年06月02日 13:28
  • 6599

微信企业付款demo

  • 2017年03月21日 16:03
  • 3KB
  • 下载

微信公众号支付详细步骤(整理)

公司做公众号时需要接入微信支付,个人根据网上的demo摸索着完成了公司公众号的支付和退款功能。现也将代码分享出来,希望对需要朋友有帮助。 一.提交支付的jsp页面代码: ...
  • aofavx
  • aofavx
  • 2016年08月16日 17:50
  • 29048
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信公众号开发---微信企业付款给个人
举报原因:
原因补充:

(最多只允许输入30个字)