PHP微信支付sdk服务商模式配置说明以及坑点解析

945 阅读1分钟

最近为客户进行微信支付接入,客户提到需要配置服务商模式以便查看多个子商户账号的流水,我下载了微信支付sdk配置和对接后,发现该sdk仅做了一些普通商户配置,没有针对服务商模式的配置,因此需要自己去修改sdk demo来支持服务商模式。

1.配置WxPay.Config.php

在类WxPayConfig里添加以下代码

    public function GetSubAppId(){
       return "(这里配置你的子商户公众账号ID)";
    }
    
    public function GetSubMerchantId(){
       return "(这里配置微信支付分配的子商户号)";
    }

    public function GetKey() {
        return "(这里配置服务商的商户支付密钥)";
    }

    public function GetAppSecret()
    {
        return "(服务商appid对应的appsecrest)"; 
    }

注意,代码里的GetAppid()(不是GetSubAppId())和GetAppsecret()在服务商模式下,应 return 服务商的公众号的appid和appsecret,GetKey()方法也应返回服务商的商户支付密钥,签名错误的报错可能就会在这里发生,切记切记。

2.配置Wxpay.Data.php

    //配置子公众账号ID
    public function SetSubAppid($value){
	    $this->values['sub_appid'] = $value;
    }

    //获取子公众账号ID
    public function GetSubAppid()
    {
        return $this->values['sub_appid'];
    }

    //配置子商户号
    public function SetSubMch_id($value){
        $this->values['sub_mch_id'] = $value;
    }

    //获取子商户号
    public function GetSubMch_id()
    {
        return $this->values['sub_mch_id'];
    }

3.配置 Wxpay.Api.php

在方法unifiedOrder里配置:

   $inputObj->SetSubAppid($config->GetSubAppId());
   $inputObj->SetSubMch_id($config->GetSubMerchantId());

这样配置就基本完成了。 但在调用的时候也是有坑的。我们看官方文档JSAPI支付统一下单的部分

微信图片_20200217155656.png
这里有两个坑点,一是如果选择传sub_openid,则必须传sub_appid;二是openid和sub_openid可以选传其中之一。一注意一下就可以了。但二要注意下,即使传了sub_openid,openid还是要传,不过是传空,不然会报错说必须传openid,坑爹啊。希望后面做这个需求的人能看到的文章少踩点坑。