当前位置: 首页 > 工具软件 > EasyWeChat > 使用案例 >

使用easywechat进行微信分账开发

伊锦
2023-12-01

第一步:添加分账接收用户

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文章........

 类似资料: