第一步:添加分账接收用户
require 'vendor/autoload.php';
use EasyWeChat\Pay\Application;
$config = [
'mch_id' => '商户号',
// 商户证书
'private_key' => 'D:\webroot\cgsxy\demo\cert\apiclient_key.pem',
'certificate' => 'D:\webroot\cgsxy\demo\cert\apiclient_cert.pem',
// v3 API 秘钥
'secret_key' => '',
/**
* 接口请求相关配置,超时时间等,具体可用参数请参考:
* https://github.com/symfony/symfony/blob/5.3/src/Symfony/Contracts/HttpClient/HttpClientInterface.php
*/
'http' => [
'throw' => true, // 状态码非 200、300 时是否抛出异常,默认为开启
'timeout' => 5.0,
//'base_uri' => 'https://api.mch.weixin.qq.com/', // 如果你在国外想要覆盖默认的 url 的时候才使用,根据不同的模块配置不同的 uri
],
];
$app = new Application($config);
$api = $app->getClient();
$response = $api->postJson("v3/profitsharing/receivers/add", [
"appid" => "wxb44ba1*******",
"type" => "PERSONAL_OPENID",
"account" => "openID", //个人openid
"relation_type"=> "USER",
"custom_relation"=>"分销商"
]);
$res = $response->toArray(false);
// var_dump($res);
echo $res['account'];
第二步:统一下单
require 'vendor/autoload.php';
use EasyWeChat\Pay\Application;
$config = [
'mch_id' => '1535038955',
// 商户证书
'private_key' => 'D:\webroot\cgsxy\demo\cert\apiclient_key.pem',
'certificate' => 'D:\webroot\cgsxy\demo\cert\apiclient_cert.pem',
// v3 API 秘钥
'secret_key' => '',
/**
* 接口请求相关配置,超时时间等,具体可用参数请参考:
* https://github.com/symfony/symfony/blob/5.3/src/Symfony/Contracts/HttpClient/HttpClientInterface.php
*/
'http' => [
'throw' => true, // 状态码非 200、300 时是否抛出异常,默认为开启
'timeout' => 5.0,
// 'base_uri' => 'https://api.mch.weixin.qq.com/', // 如果你在国外想要覆盖默认的 url 的时候才使用,根据不同的模块配置不同的 uri
],
];
$app = new Application($config);
$response = $app->getClient()->postJson("v3/pay/transactions/jsapi", [
"mchid" => "1535088901", // <---- 请修改为您的商户号
"out_trade_no" => "20230207125536",
"appid" => "wxb44ba13********", // <---- 请修改为服务号的 appid
"description" => "这是来自john的微信支付测试",
"notify_url" => "http://demo.sohu.com/demo/notify.php",
"amount" => [
"total" => 100,
"currency" => "CNY"
],
"payer" => [
"openid" => "oXILr5uX73IiEvquefDK1Uy9rka8" // <---- 请修改为服务号下单用户的 openid
],
"settle_info" => [
"profit_sharing" => true //是否支持分账,这个必须设置,否则分账会失败;
]
]);
$res = $response->toArray();
// var_dump($res);
$prepayId = $res['prepay_id'];
$utils = $app->getUtils();
$appId = 'wxb44ba137*******';
$signType = 'RSA'; // 默认RSA,v2要传MD5
$config = $utils->buildBridgeConfig($prepayId, $appId, $signType); // 返回数组
?>
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
wx.config({
debug: true, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。
appId: '<?= $appId; ?>', // 必填,公众号的唯一标识
timestamp: <?= $config['timeStamp'] ?>, // 必填,生成签名的时间戳
nonceStr: '<?= $config['nonceStr'] ?>', // 必填,生成签名的随机串
signature: '<?= $config['paySign'] ?>',// 必填,签名
jsApiList: ['chooseWXPay'] // 必填,需要使用的 JS 接口列表
});
wx.ready(function() {
wx.chooseWXPay({
timestamp: '<?= $config['timeStamp'] ?>', // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写,但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符
nonceStr: '<?= $config['nonceStr'] ?>', // 支付签名随机串,不长于 32 位
package: '<?= $config['package'] ?>', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: '<?= $config['signType'] ?>', // 微信支付V3的传入 RSA ,微信支付V2的传入格式与V2统一下单的签名格式保持一致
paySign: '<?= $config['paySign'] ?>', // 支付签名
success: function (res) {
//支付成功后的回调函数
if(res.errMsg.indexOf("ok")>0){
alert("付款成功!");
window.location.href='./';
}else if(res.errMsg.indexOf("cancel")>0){
alert("取消付款!");
window.location.href='./';
}else{
alert(res.errMsg);
}
}
});
});
</script>
第三步:进行分账
require 'vendor/autoload.php';
use EasyWeChat\Pay\Application;
$config = [
'mch_id' => '1538995501',
// 商户证书
'private_key' => 'D:\webroot\cgsxy\demo\cert\apiclient_key.pem',
'certificate' => 'D:\webroot\cgsxy\demo\cert\apiclient_cert.pem',
// v3 API 秘钥
'secret_key' => '', //填写API秘钥
/**
* 接口请求相关配置,超时时间等,具体可用参数请参考:
* https://github.com/symfony/symfony/blob/5.3/src/Symfony/Contracts/HttpClient/HttpClientInterface.php
*/
'http' => [
'throw' => true, // 状态码非 200、300 时是否抛出异常,默认为开启
'timeout' => 5.0,
//'base_uri' => 'https://api.mch.weixin.qq.com/', // 如果你在国外想要覆盖默认的 url 的时候才使用,根据不同的模块配置不同的 uri
],
];
$app = new Application($config);
$api = $app->getClient();
$data='{
"appid": "wxb44ba1*******",
"transaction_id": "4200001747202302075803406206",
"out_order_no": "20230207125536",
"receivers": [
{
"type": "PERSONAL_OPENID",
"account": "oXILr5uX73IiEvquefDK1Uy9rka8", //个人openID
"amount": 10, //在微信支付商家后台,设置分账比例,此金额一定 <= 分账比例(在扣除手续费后);
"description": "分给quwei"
}
],
"unfreeze_unsplit": true
}';
$obj = json_decode($data, true);
// var_dump($obj);exit();
$response = $api->postJson("v3/profitsharing/orders", $obj);
$res = $response->toArray(false);
var_dump($res);
环境要求:php>=8.0
easywechat6 这个版本 需要开通的扩展,请参考官方网站;
openSSL证书 cacert 在php.ini里的配置,请参考我之前关于easywechat文章........