wechatpay-apiv3 / wechatpay-guzzle-middleware

微信支付 APIv3 Guzzle HTTP Client中间件(middleware)
Apache License 2.0
208 stars 46 forks source link

1 #24

Closed void9main closed 4 years ago

void9main commented 4 years ago

1

xy-peng commented 4 years ago

具体的错误贴一下?单纯的吐槽不解决问题,大家一起优化才能做得更好。

tpirc3 commented 4 years ago

@void9main 有问题就描述说明问题。。(或者你也可以先简单看下PHP try catch 怎么用 和 Guzzle 🙂

void9main commented 4 years ago

里面的readme文档 关于开始部分的这一行 // 将WechatPayMiddleware添加到Guzzle的HandlerStack中 $stack = HandlerStack::create(); $stack->push($wechatpayMiddleware, 'wechatpay');HandlerStack::create(); 前应该要加上 \GuzzleHttp\HandlerStack::create(); 才能正常使用,因为一般的php框架里面没有自主加载过Guzzle 同理sdk里面其他用到Guzzle的地方也没有任何提示 其次 image 参数格式改成了json形式和v2版本里面的对象赋值变化很大,导致返回401签名错误的时候要花很多时间才能知道最终生成签名的xml是什么才能调试签名问题 应该可以加上一个方法或者单独列出一个方法方便在错误的时候打印出提交的参数的组合值,方便对接调试

void9main commented 4 years ago

开始对接的有点烦了,情绪有点冲动,不好意思

xy-peng commented 4 years ago

谢谢这些很好的建议,我们来优化下。

tpirc3 commented 4 years ago

如果是调试时想分析实际发出去的请求数据,可以这么做:

// 将WechatPayMiddleware添加到Guzzle的HandlerStack中
$stack = GuzzleHttp\HandlerStack::create();
$stack->push($wechatpayMiddleware, 'wechatpay');

// 添加一个调试Middleware, 打印出实际请求,仅用于调试时分析请求数据
$stack->push(GuzzleHttp\Middleware::mapRequest(function (Psr\Http\Message\RequestInterface $request) {
    echo "Debugging request: ".$request->getMethod()." ".$request->getUri()." \n";
    echo "[Headers]\n";
    foreach ($request->getHeaders() as $name => $values) {
        echo $name . ': ' . implode(', ', $values)."\n";
    }
    echo "[Body]\n";
    echo $request->getBody();

    return $request;
}));

// 创建Guzzle HTTP Client时,将HandlerStack传入
$client = new GuzzleHttp\Client(['handler' => $stack]);