PHP 微信 消费者投诉 下载图片 api接口

 下载官方SDK

        使用 PHP 包管理工具 Composer 安装 SDK:

        composer require wechatpay/wechatpay

https://github.com/wechatpay-apiv3/wechatpay-phphttps://github.com/wechatpay-apiv3/wechatpay-php

下载IDE 描述包

为 wechatpay-php 增加IDE提示的接口描述包 iwechatpay/openapi 介绍 | 微信开放社区wechapay-php 开发包的辅助包 iwechatpay/openapi 介绍https://developers.weixin.qq.com/community/develop/article/doc/000a0ce867842092f8cc65e5356013

开始使用

        实例化 配置好参数

require_once('vendor/autoload.php');

use WeChatPay\Builder;
use WeChatPay\Crypto\Rsa;
use WeChatPay\Util\PemUtil;

// 设置参数

// 商户号
$merchantId = '190000****';

// 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名
$merchantPrivateKeyFilePath = 'file:///path/to/merchant/apiclient_key.pem';
$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);

// 「商户API证书」的「证书序列号」
$merchantCertificateSerial = '3775B6A45ACD588826D15E583A95F5DD********';

// 从本地文件中加载「微信支付平台证书」,用来验证微信支付应答的签名
$platformCertificateFilePath = 'file:///path/to/wechatpay/cert.pem';
$platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);

// 从「微信支付平台证书」中获取「证书序列号」
$platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);

// 构造一个 APIv3 客户端实例
$instance = Builder::factory([
    'mchid'      => $merchantId,
    'serial'     => $merchantCertificateSerial,
    'privateKey' => $merchantPrivateKeyInstance,
    'certs'      => [
        $platformCertificateSerial => $platformPublicKeyInstance,
    ],
]);

平台证书下载

        微信支付SDK 中 PHP Certificate Downloader 微信支付 APIv3 平台证书的命令行下载工具 使用教程_fuchto的博客-CSDN博客使用环境在linux 环境中使用使用前准备商户号、商户证书序列号、商户私匙文件(pem格式)、ApiV3密钥安装好 微信支付SDK 使用composer安装composer require wechatpay/wechatpayApiV3 密钥设置什么是APIv3密钥?如何设置?第一步 进入对应项目目录根目录 校验composer 是否可用输入命令 composer -v 第二步 查询当前可用命...https://blog.csdn.net/fuchto/article/details/122946465官方文档:

        微信支付-开发者文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter10_2_18.shtml开始请求

$item = "当获取到投诉资料信息后获取到的 media_url";
$urlInfo = (parse_url($item));
//  获取请求的路径 参数
$media_slot_url = str_replace('/v3/merchant-service/images/','',$urlInfo['path']);
try {
// $stack 是因为 使用官方 SDK时 由于 sdk 会自动进行验签 而官方返回的是数据流并不用验签 所以需要特殊处理  在请求时加入 ['handler' => $stack]  
    $stack = clone $instance->getDriver()->select()->getConfig('handler');
    $stack->remove('verifier');
//  下载接口都是非标接口,要特殊搞一下 要 {+media_slot_url} 这样的语法结构
    $res = $instance->chain('v3/merchant-service/images/{+media_slot_url}')->get([
        'handler' => $stack,
        'media_slot_url'=>$media_slot_url,
    ]);
    $filename = time().rand(9999,99999).'.jpg';
// 获取图片资源
    $file = $res->getBody();
// 保存图片到本地
    $info = $this->saveImage("./public/upload/media",$filename,$file);

}catch (RequestException $e){
    echo $e->getMessage()."\n";
    echo $e->getResponse()->getBody();
}


// 保存图片到本地
  function saveImage($save_dir = './public/upload/loan',$filename='image.jpg',$file)
    {
        if(trim($save_dir)=='')
            $save_dir='./';

        if(0!==strrpos($save_dir,'/'))
            $save_dir.='/';

        //创建保存目录
        if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true))
            return array('file_name'=>'','save_path'=>'','error'=>5);



        $resource = fopen($save_dir . $filename, 'a');
        fwrite($resource, $file);
        fclose($resource);
        unset($file,$url);
        return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
    }

 为什么使用 {+media_slot_url} 语法结构

请求后响应 

The response's Headers incomplete, must have(`Wechatpay-Nonce`, `Wechatpay-Serial`, `Wechatpay-Signature` and `Wechatpay-Timestamp`).
failed,resp code = 200 return body =

是因为没有加入 $stack 进行特殊处理 sdk 进行了 验签 返回值是binary 图片流,不用验签

报错 400 是因为请求时 参数出现了问题 注意 对照一下 返回的参数和 请求的参数之间的区别

其他測試用例

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fuchto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值