微信支付v3 介面-特約商戶進件提交,狀態查詢,以及圖片上傳 , 使用 github.com/snowlyg/wechatpay-guzzl... 實現微信簽名認證。
環境要求
- PHP 5.5+ / PHP 7.0+
- guzzlehttp/guzzle 6.0+
注意:PHP < 7.2 需要安裝 bcmath 擴充套件
安裝 composer
composer require snowlyg/wechatpay-guzzle
使用方法
參考:github.com/wechatpay-apiv3/wechatp...
圖片資料獲取
// $filepath 圖片地址
$imginfo = pathinfo($filepath);
$picturedata = file_get_contents($filepath);
$sign = hash('sha256', $picturedata);
$meta = [
"filename" => $imginfo['basename'],
"sha256" => $sign,
];
$filestr = json_encode($meta);
圖片 body 生成
public function getBody($filestr, array $imginfo, $picturedata)
{
$boundarystr = "--{$this->boundary}\r\n";
$out = $boundarystr;
$out .= 'Content-Disposition: form-data; name="meta";'."\r\n";
$out .= 'Content-Type: application/json; charset=UTF-8'."\r\n";
$out .= "\r\n";
$out .= "".$filestr."\r\n";
$out .= $boundarystr;
$out .= 'Content-Disposition: form-data; name="file"; filename="'.$imginfo['basename'].'";'."\r\n";
$out .= 'Content-Type: image/'.$imginfo['extension'].';'."\r\n";
$out .= "\r\n";
$out .= $picturedata."\r\n";
$out .= "--{$this->boundary}--\r\n";
return $out;
}
圖片簽名
// 上傳圖片
$resp = $client->request('POST', 'https://api.mch.weixin.qq.com/v3/...', [
'body' =>\GuzzleHttp\Psr7\stream_for($body),
// meta的json串 ,簽名使用
"metaJson" => '{ "filename": "filea.jpg", "sha256": " hjkahkjsjkfsjk78687dhjahdajhk " }',
'headers' => [
'Accept' => 'application/json',
"Content-Type" => " multipart/form-data;boundary=boundary",
]
]);
進件敏感資料加密
public function getEncrypt($str)
{
$public_key = file_get_contents($this->wechat_public_cert);
$encrypted = '';
if (openssl_public_encrypt($str, $encrypted, $public_key, OPENSSL_PKCS1_OAEP_PADDING)) {
$sign = base64_encode($encrypted);
} else {
throw new Exception('encrypt failed');
}
return $sign;
}
開發插曲
寫此功能的時候,在微信開放社群找到一個寫過次功能的哥們聯絡方式。本來想向他請教一下,以免自己少走彎路。沒想到這哥們直接開口要 300 大洋….
看來沒法偷懶了,只能自己寫了。
在微信開放社群找到很多朋友分享的程式碼,非常感謝他們。
還有微信官方文件的微信簽名 sdk , github.com/snowlyg/wechatpay-guzzl... 。
聯絡交流
如果你發現了BUG或者有任何疑問、建議,請透過issue進行反饋。
也可以加 QQ 群交流:676717248
本作品採用《CC 協議》,轉載必須註明作者和本文連結