ホームページ  >  記事  >  WeChat アプレット  >  WeChatパブリックアカウントの赤い封筒配布と企業支払いの実装方法

WeChatパブリックアカウントの赤い封筒配布と企業支払いの実装方法

小云云
小云云オリジナル
2018-03-20 14:17:323631ブラウズ

WeChat現金紅包は、WeChat決済加盟店プラットフォームが提供するマーケティングツールの1つであり、発売以来加盟店やユーザーに深く愛されています。販売者は、このプラットフォームを通じて WeChat Pay ユーザーに現金赤い封筒を発行できます。ユーザーが赤い封筒を受け取った後、資金はユーザーの WeChat 支払い変更アカウントに到着し、マーチャントの日常業務におけるマーケティング活動に熱狂的な反応をもたらします。
1. 赤い封筒を送信するために認証ディレクトリに料金を支払う必要はありませんが、販売者のバックエンドで赤い封筒 API の IP アドレスを呼び出す必要があります。これは、赤い封筒リクエストを開始するサーバーの IP です。操作パスは次のとおりです: [マーチャントプラットフォームにログイン -> 製品センター - -> 現金赤い封筒 -> 製品設定] (注: 「製品設定」操作ボタンは現金赤い封筒機能を有効にした後にのみ表示されます) 。
2. 赤い封筒を送るには API 証明書が必要です。
3. 赤い封筒を発行する前に、十分な資金があることを確認してください。あなたのプラットフォームで商品を購入するために他の人が WeChat Pay を通じてあなたに支払うお金は、あなたが赤い封筒を送るのに必要なお金と同じではありません。ここでのお金は別途リチャージする必要があります: [販売者にログインします。プラットフォーム——>アカウントセンター——>資金管理——>リチャージ]。
4. 赤い封筒を送信するときに権利を借用できます。たとえば、パブリック アカウント A が WeChat 支払い認証サービス アカウントを開設し、イベントがパブリック アカウント B で開催されます (パブリック アカウント B は任意です)。 A の WeChat を使用できます。赤い封筒を支払って送信するには、この openid を取得するためにユーザーの openid を知る必要があります。また、公開アカウント A を借用して取得する必要があります。つまり、赤い封筒を送信するための openid です。 through 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決済インターフェースの研究と共有について

以上がWeChatパブリックアカウントの赤い封筒配布と企業支払いの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。