>위챗 애플릿 >위챗 개발 >위챗공용계정 빨간봉투 배포 및 기업결제 구현방법

위챗공용계정 빨간봉투 배포 및 기업결제 구현방법

小云云
小云云원래의
2018-03-20 14:17:323707검색

WeChat 현금 빨간 봉투는 WeChat 결제 가맹점 플랫폼에서 제공하는 마케팅 도구 중 하나로 출시 이후 가맹점과 사용자에게 깊은 사랑을 받아왔습니다. 판매자는 이 플랫폼을 통해 WeChat Pay 사용자에게 현금 빨간 봉투를 발행할 수 있습니다. 사용자가 빨간 봉투를 받은 후 사용자의 WeChat 결제 변경 계좌에 자금이 도착하며, 이는 판매자의 일상적인 마케팅 활동에 대한 뜨거운 반응을 불러일으킵니다.
1. 빨간 봉투를 보내기 위해 인증 디렉터리에 비용을 지불할 필요는 없지만, 빨간 봉투 요청을 시작하는 서버의 IP인 판매자 백엔드의 빨간 봉투 API의 IP 주소를 호출해야 합니다. 작업 경로는 다음과 같습니다. [가맹점 플랫폼 로그인 ——>제품 센터— —>현금 빨간 봉투——>제품 설정] (참고: "제품 설정" 조작 버튼은 현금 빨간 봉투 기능을 활성화한 후에만 나타납니다. ).
2. 빨간 봉투를 보내려면 API 인증서가 필요합니다.
3. 현금 빨간 봉투를 발행하기 전에 충분한 자금이 있는지 확인하십시오. 귀하의 플랫폼에서 물건을 구매하기 위해 다른 사람들이 WeChat Pay를 통해 지불하는 돈은 빨간 봉투를 보내는 데 필요한 돈과 동일하지 않습니다. 여기에서 돈을 별도로 충전해야 합니다. 작업 경로는 다음과 같습니다. 플랫폼——>계정 센터——>자금 관리——>충전].
4. 빨간 봉투를 보낼 때 권한을 빌릴 수 있습니다. 예를 들어 공개 계정 A는 WeChat 결제 인증 서비스 계정을 개설했으며 이벤트는 공개 계정 B에서 진행됩니다. A의 WeChat 계정을 사용할 수 있습니다. 빨간 봉투를 지불하고 보내려면 사용자의 openid를 알아야 빨간 봉투를 보낼 수 있습니다. 이 openid를 얻으려면 공용 계정 A도 빌려야 합니다. A를 통한 빨간색 봉투는 사용자의 A에 해당하는 openid여야 합니다.

사전 작업 준비, 즉 WeChat 결제 가맹점 플랫폼의 일부 구성은 다음 문서를 참조하세요: https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter =13_3&index=2

사실 WeChat 공식 계정에서 빨간 봉투를 보내는 것은 WeChat 공식 계정에서 기업 결제와 유사합니다. 그런데 더 이상 고민하지 않고 코드로 바로 이동하겠습니다.

/**
 * 公众号发红包
 * @param string $openid 	用户openID
 * @param string $money 	金额
 * @param string $trade_no  订单编号
 * @param string $act_name  活动名称
 * @return multitype 		支付结果
 */
public function sendredpack($openid,$money,$trade_no,$act_name){
	$config = $this->config;
	
	$data = array(
		'nonce_str' 		=> self::getNonceStr(),
		'mch_billno'     	=> $trade_no,
		'mch_id' 			=> $config['mch_id'],
		'wxappid' 			=> $config['wxappid'],
		'send_name' 		=> '江南极客',
		're_openid'    		=> $openid,
		'total_amount'    	=> $money * 100, //付款金额单位为分
		'total_num'    		=> 1,
		'wishing'      		=> '祝您天天开心!',
		'client_ip' 		=> self::getip(),
		'act_name' 			=> $act_name,
		'remark' 			=> 'From 江南极客'
	);
	
	$data['sign'] = self::makeSign($data);
	
	//构造XML数据
	$xmldata = self::array2xml($data);
	
	$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
	//发送post请求
	$res = self::curl_post_ssl($url, $xmldata);
	
	if(!$res){
		return array('status'=>0, 'msg'=>"Can't connect the server" );
	}
	
	// 这句file_put_contents是用来查看服务器返回的结果 测试完可以删除了
	//file_put_contents('./log.txt',$res,FILE_APPEND);
	
	$content = self::xml2array($res);
	if(strval($content['return_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['return_msg']));
	}
	if(strval($content['result_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
	}
	return $content;
}
	
/**
 * 公众号企业支付
 * @param string $openid 	用户openID
 * @param string $money 	金额
 * @param string $trade_no  订单编号
 * @param string $desc  	付款操作说明信息(比如:提现)
 * @return string 	支付结果
 */
public function mchpay($openid,$money,$trade_no,$desc){
	$config = $this->config;
	$data = array(
		'mch_appid' => $config['wxappid'],
		'mchid'     => $config['mch_id'],
		'nonce_str' => self::getNonceStr(),
		'partner_trade_no' => $trade_no, 
		'openid'    => $openid,
		'check_name'=> 'NO_CHECK', 			//OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
		'amount'    => $money * 100, 		//付款金额单位为分
		'desc'      => $desc,
		'spbill_create_ip' => self::getip()
	);
	
	//生成签名
	$data['sign'] = self::makeSign($data);
	
	//return $config;
	
	//构造XML数据
	$xmldata = self::array2xml($data);
	$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
	//发送post请求
	$res = self::curl_post_ssl($url, $xmldata);
	if(!$res){
		return array('status'=>0, 'msg'=>"Can't connect the server" );
	}
	// 这句file_put_contents是用来查看服务器返回的结果 测试完可以删除了
	//file_put_contents('./log1.txt',$res,FILE_APPEND);
	
	//付款结果分析
	$content = self::xml2array($res);
	if(strval($content['return_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['return_msg']));
	}
	if(strval($content['result_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
	}
   
	return $content;
}

이것은 캡슐화된 클래스와 호출 방법입니다. 또한 매우 간단합니다.

include 'wxmerpay.class.php';		//引入类文件
$config = array(
	'wxappid'		=> 'wx123456789',
	'mch_id'	 	=> '1123456781',
	'pay_apikey' 	=> '1234567898765432123456789',
	'api_cert'		=> $cert_path . '/apiclient_cert.pem',	
	'api_key'		=> $cert_path . '/apiclient_key.pem',
	'rootca'		=> $cert_path . '/rootca.pem'
);
$redpack = new WxRedpack($config);	//初始化
$redpack->sendredpack($openid,$money,$trade_no,$act_name);  //发红包

그렇게 간단합니까? 오른쪽! 그렇게 간단하지만 자체 캡슐화된 기능과 방법을 많이 사용합니다. 소스 코드 다운로드: http://download.csdn.net/download/sinat_35861727/9956485
정말 유용하다고 생각되면 좋아요를 눌러주세요. 좋은 리뷰를 남겨주세요. 질문이 있으시면 댓글 영역에서 알려주세요!

관련 권장 사항:

WeChat 결제 환불 기능 개발

WeChat 결제 및 Alipay 결제의 PHP 개발 예시

WeChat 결제 인터페이스 연구 및 공유 정보

위 내용은 위챗공용계정 빨간봉투 배포 및 기업결제 구현방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.