nodejs微信支付小微商戶申請入駐時,如何實現圖片上傳介面
微信支付小微商戶可以通過小程式《微信買單服務商助手》來進件,也可以通過API介面來進件(詳情可查閱小微商戶專屬介面文件)。
通過API介面進件前需要先在商戶資料中的身份證照片和門店照片通過圖片上傳介面上傳到微信的伺服器,並獲取media_id。
圖片上傳介面文件是這樣寫的:
上傳圖片
服務商操作員呼叫 API 介面,上傳證件照片。支援 jpeg、jpg、bmp、png 格式。通過 POST 表單來呼叫該介面,表單媒體檔案 id 為 media,需有 filename、filelength、content-type 等資訊,請求報文的內容需以 multipart/form-data 方式提交。 URL 地址:https://api.mch.weixin.qq.com/secapi/mch/uploadmedia
是否需要證書
是
請求引數
欄位名 |
變數名 |
必填 |
型別 |
示例值 |
描述 |
|
---|---|---|---|---|---|---|
商戶號 |
mch_id |
是 |
String(32) |
銀行商戶號或渠道號 |
||
媒體檔案 |
media |
是 |
String(256) |
form-data 中媒體檔案標識,有 filename、filelength、content-type 等資訊。不參與簽名計算 |
||
媒體檔案內容 hash 值 |
media_hash |
是 |
String(32) |
根據媒體檔案內容進行MD5 計算後的值 |
||
簽名 |
sign |
是 |
String(32) |
D675A1E471DBF7C0 B1AC5883B5BDA9EF |
||
簽名方式 |
sign_type |
否 |
String(10) |
HMAC-SHA256 |
HMAC-SHA256 加密方式,其他或者不填為MD5方式 |
返回引數
欄位名 |
變數名 |
必填 |
型別 |
示例值 |
描述 |
|
---|---|---|---|---|---|---|
返回狀態碼 |
return_code |
是 |
String(16) |
SUCCESS |
||
返回資訊 |
return_msg |
否 |
String(128) |
簽名失敗 |
以下欄位在 return_code 為 SUCCESS 的時候有返回
變數名 |
必填 |
型別 |
示例值 |
||
---|---|---|---|---|---|
業務結果 |
result_code |
是 |
String(32) |
||
媒體標識 Id |
media_id |
是 |
String(256) |
9UYfXi-WMUhgWXvJtEw4_g Ble_EfrD_pIL0bS8GAsK8 |
|
簽名 |
sign |
是 |
String(32) |
||
錯誤程式碼 |
err_code |
否 |
String(32) |
INVALID_REQUEST |
|
錯誤程式碼描述 |
err_code_des |
否 |
String(128) |
商戶號資訊有誤,請檢查修改後重試 |
請求示例
curl --cert ./apiclient_cert.pem --key ./apiclient_key.pem -F'mch_id=1000000000' -F 'media_hash=709d1e858d2ef9d0501cc053668b2872' -F 'sign=D675A1E471DBF7C0B1AC5883B5BDA9EF' -F '[email protected]' https://api.mch.weixin.qq.com/secapi/mch/uploadmedia
響應示例
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<result_code><![CDATA[SUCCESS]]></result_code>
<media_id><![CDATA[9UYfXi-WMUhgWXvJtEw4_gBle_EfrD_pIL0bS8GAsK8]]></media_id>
<sign><![CDATA[D675A1E471DBF7C0B1AC5883B5BDA9EF]]></sign>
</xml>
錯誤碼
錯誤碼 | 名稱 | 描述 | 解決方案 |
---|---|---|---|
INVALID_REQUEST |
不支援 http get方法 |
請使用 post 方法,請檢查後重新提交 |
檢查輸入引數 |
INVALID_REQUEST |
xml 格式錯誤 |
xml 引數格式錯誤,請檢查後重新提交 |
|
SIGNERROR |
驗籤錯誤 |
簽名校驗失敗,請檢查後重試 |
|
INVALID_REQUEST |
需要證書 |
獲取客戶端證書序列號失敗 獲取客戶端證書特徵名稱(DN)域失敗 證書校驗失敗,請檢查後重試 |
檢查證書 |
PARAM_ERROR |
引數錯誤 |
引數填寫有誤,請檢查後重試 |
人工檢查過濾 |
PARAM_ERROR |
圖片檔案錯誤 |
圖片格式不正確,請檢查後重新提交 圖片大小不能超過 2M,請檢查後重新提交 圖片 Hash 值有誤,請檢查後重新提交 |
檢查圖片 |
PARAM_ERROR |
商戶號錯誤 |
商戶號 mchid 有誤,請檢查後重試 |
檢查商戶號是否正確 |
INVALID_REQUEST |
呼叫許可權 |
暫無許可權,請檢查後重試 |
檢查許可權 |
FREQUENCY_LIMITED |
頻率限制 |
操作過快,請稍後重試 |
放慢上傳頻率 |
SYSTEMERROR |
上傳圖片失敗 |
上傳圖片失敗,請稍後重試 |
聯絡微信支付客服 |
程式碼如下,其中getXML為解析XML的函式,請自行完成:
var https = require("https");
var crypto = require('crypto');
var hmac_sha256 = require("crypto-js/hmac-sha256"); //請自行 npm install crypto-js
var uploadMedia = function(filePath, fname, fn){
//要上傳的檔案完整路徑
var cfile = filePath + "\\" + fname;
var mch_id = "服務商商戶號";
var wkey = "API金鑰或APIv3金鑰";
//讀取圖片內容
var buffer = fs.readFileSync(cfile);
var fsize = Buffer.byteLength(buffer);
//獲取圖片hash值(MD5)
var fsHash = crypto.createHash('md5');
fsHash.update(buffer);
var fmd5 = fsHash.digest('hex');
//對引數進行hmac_sha256簽名
var signData = 'mch_id=' + mch_id + '&media_hash=' + fmd5 + '&sign_type=HMAC-SHA256' + "&key=" + wkey;
var sign = hmac_sha256(signData, wkey) + '';
sign = sign.toUpperCase();
//開始構建包頭內容(包頭需要傳入必須的引數,如:mch_id、media_hash、sign、sign_type)
var boundaryKey = Math.random().toString(16); //隨機數,目的是防止上傳檔案中出現分隔符導致伺服器無法正確識別檔案起始位置
var payload = '--' + boundaryKey + '\r\n'
+ 'Content-Disposition:form-data; name="mch_id"\r\n\r\n'
+ '' + mch_id + '\r\n'
+ '--' + boundaryKey + '\r\n'
+ 'Content-Disposition:form-data; name="media_hash"\r\n\r\n'
+ '' + fmd5 + '\r\n'
+ '--' + boundaryKey + '\r\n'
+ 'Content-Disposition:form-data; name="sign"\r\n\r\n'
+ '' + sign + '\r\n'
+ '--' + boundaryKey + '\r\n'
+ 'Content-Disposition:form-data; name="sign_type"\r\n\r\n'
+ 'HMAC-SHA256\r\n'
+ '--' + boundaryKey + '\r\n'
+ 'Content-Disposition:form-data; name="media"; filename="' + fname + '"\r\n'
+ 'Content-Type:image/png\r\n'
+ 'Content-Transfer-Encoding:binary\r\n\r\n';
//開始構建包尾內容
//注意前面必須且只能有一個換行符,否則會返回“圖片 Hash 值有誤,請檢查後重新提交”的錯誤提示
//後面必須且只能有各個換行符,否則會返回“引數填寫有誤,請檢查後重試”的錯誤提示
var enddata = '\r\n--' + boundaryKey + '--\r\n';
var rq = https.request({
host: 'api.mch.weixin.qq.com',
port: 443,
pfx:fs.readFileSync('./cert/' + mch_id + '.pfx'),
passphrase:mch_id,
path: '/secapi/mch/uploadmedia',
method: 'POST'
},function(ress){
var str='';
ress.on('data',function(buf){
str+=buf;//用字串拼接
});
ress.on('end',function(){
if(getXML(str, "return_code") != "SUCCESS"){
if(fn) fn('{"code":-1, "msg":"無法上傳圖片《' + fname + '》(' + getXML(str, "return_msg") + ')"}');
return;
}
if(getXML(str, "result_code") != "SUCCESS"){
if(fn) fn('{"code":-1, "msg":"無法上傳圖片《' + fname + '》(' + getXML(str, "err_code_des") + ')"}');
return;
}
if(fn) fn(getXML(str, "media_id"));
});
});
//寫header頭,表示包識別符,和包大小
rq.setHeader('Content-Type', 'multipart/form-data; boundary='+boundaryKey+'');
rq.setHeader('Content-Length', Buffer.byteLength(new Buffer(payload, 'binary'))+Buffer.byteLength(new Buffer(enddata, 'binary'))+fsize);
//發包
rq.write(Buffer.concat([new Buffer(payload, 'binary') , buffer , new Buffer(enddata, 'binary')]) );
rq.on('error',function(err){
if(fn){fn('{"code":-1, "msg":"無法上傳圖片《' + fname + '》(' + err.message + ')"}')}
});
rq.end();
}
相關推薦
nodejs微信支付小微商戶申請入駐時,如何實現圖片上傳介面
微信支付小微商戶可以通過小程式《微信買單服務商助手》來進件,也可以通過API介面來進件(詳情可查閱小微商戶專屬介面文件)。 通過API介面進件前需要先在商戶資料中的身份證照片和門店照片通過圖片上傳介面上傳到微信的伺服器,並獲取media_id。 圖片上傳介面文件是這樣寫的
微信端調取相冊和攝像頭,實現圖片上傳,並上傳到本地服務器
配置 epic 替換 pan source 工具 alert 調試 family 在微信公眾號網頁開發時,遇到了圖片上傳的問題,查看了微信的開發者文檔,裏面的資料比較全。接著我們看一下整個的流程 1、config權限配置 $.ajax({ url:‘wx_getC
小程式日記-微信支付提示201商戶訂單號重複
微信支付有2個步驟: 1. 預下單,提供幾個引數(openid,訂單內容,訂單號,總價),預下單成功後獲得預下單號 2.再用預下單號和訂單號真正進行支付。 如果你用了相同的訂單號,但是訂單內容和總價不一樣。則會提醒201商戶訂單號重複. 如果訂單號,內容總價都一樣, 微信會檢查是否已經成功支付,會提醒
微信支付小程序是什麽 微信的9.6億市場如何利用
微信小程序 小程序如何用 小程序是什麽?小程序是幫助商家在微信更便捷地獲取和傳播信息並且有非常出色的使用體驗,采寶支付,專註於企業產品開發,實力塑造高端定制品牌。 通過小程序,體驗十二大流量入口 使用小程序的三大
采寶微信支付小程序 商家使用小程序好處
微信小程序 采寶小程序 小程序好處 商家使用小程序 微信小程序已經正式發布,只有了解微信小程序開發工具的使用,為了抓住機遇,進入支付市場,拿下小程序的第一波紅利。 隨著公眾人數的增加,各種社區開始萌芽和發展。小程序有一個很容易被忽視的重要特征,那就是社區的本質。誰都知道社區人的微信群初始設置很
微信支付開發 微信支付 微信商戶免充值代金券 沙箱密鑰
width tran 產生 img 安全 原理 性能 正式 固定 一、仿真測試系統 為降低商戶測試門檻,微信支付團隊開發了一套獨立的仿真測試系統。該系統根據驗收用例金額的不同返回不同的響應報文,以滿足商戶正常功能測試、安全/異常測試及性能測試的需求。 圖1 微信支付仿真
解決微信支付出現OUT_TRADE_NO_USED:商戶訂單號重復
image 現在 對待 行修改 沒有 col 業務 界面 描述 在這裏和大家說一下微信APP支付時出現的一個問題! 在APP調起支付的時候出現了錯誤碼:OUT_TRADE_NO_USED:商戶訂單號重復! 1 xxxxxxx312 xxxxxxx 因為
微信二次開發案例,python製作微信支付小程式!
由於最近自己在做小程式的支付,就在這裡簡單介紹一下講一下用python做小程式支付這個流程。當然在進行開發之前還是建議讀一下具體的流程,清楚支付的過程。 1.支付互動流程 當然具體的引數配置可以參考官方文件 https://p
微信小微商戶圖片上傳介面
先貼上圖片上傳文件地址 https://pay.weixin.qq.com/wiki/doc/api/download/img_upload.pdf 圖片上傳介面返回的media_id在申請入駐介面時有用,所以一開始就得把這個調通,才能繼續往下走申請入駐介面。 下面直接上
C#微信支付(五)—— 申請退款
退款也比較簡單,需要注意的是退款是需要證書的,需要去 微信商戶平臺(pay.weixin.qq.com)–>賬戶中心–>賬戶設定–>API安全–>證書下載, 把證書下載好後代入請求中。相關連結:申請退款 這是WxPayApi.cs的一個
淺析微信支付:微信支付簡單介紹(小程式、公眾號、App、H5)
本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 微信支付是整合在微信客戶端的支付功能,使用者可以通過手機完成快速的支付流程。微信支付以餘額、繫結銀行卡的快捷支付為基礎,向用戶提供安全、快捷、高效的支
公眾號支付 微信支付 小程式支付 h5支付開發連載(二):h5頁面提交訂單
上一節給大家分享了使用者授權公眾號獲取使用者openid的詳細教程,本節給大家繼續分享使用者進入公眾號的h5網頁提交訂單的實現過程 上節教程獲取到使用者openid後,把這個引數返回到h5頁面,用隱藏域接收後再連同這個openid以及訂單所有資訊提交後臺介面,這裡以最關鍵的訂單資訊:金額為例
微信支付之微信小程式支付
今天給大家介紹一下微信小程式是如果實現支付的流程,在開發之前我們首先要獲取到商戶的appId和mchId最後就是商戶的key值了。這些值在商戶申請成功之後都會通過郵件的形式傳送給商戶,所以如果還沒有拿到這些值的情況下,是不能夠進行微信支付的。上面的那些值全部拿到之後,我們就可
thinkphp 微信支付 thinkphp 微信企業付款
證書 library 代碼 版本 一個 文件 類庫 acc 微信 前面已經跑通了微信支付的流程,接下來吧微信支付和微信企業付款接入到thinkphp中,版本是3.2 把微信支付類、企業付款類整合到一起放到第三方類庫,這裏我把微信支付幫助類和企業付款類放到同一個文件了: 把P
微信支付(微信公眾號支付) [記錄]
scope err question dir rec package ready fad span 後臺 先獲取code code有效5min public string GetCodeUrl(string Appid, string redirect
php CI 微信支付擴充套件 微信掃碼支付 jssdk 支付 退款
微信支付API類庫來自:https://github.com/zhangv/wechat-pay 請先看一眼官方場景及支付時序圖:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 官方API列表:h
【最高補貼3萬】微信支付18年校招開始了,快發簡歷來!
騰訊2018年校園招聘即將開始,2019年畢業的同學歡迎自薦,有親朋好友明年畢業的話也歡迎推薦。 微信支付今年招聘各個崗位的優秀人才,在這裡你可以接觸最前沿的網際網路產品形態,可以學習和使用最先進的網際網路技術,可以接觸到和消費相關的各行各業。在這裡你可以和優秀的同事們一起努力,讓微信支付
微信支付-無法識別qrcode生成的二維碼圖片
1、開始使用 table方式,但是還是無法識別二維碼 http://www.cnblogs.com/staticed/p/8549316.html var code_url = data.code_url; $("#wechatQrcode").q
微信支付V3微信公眾號支付PHP教程(thinkPHP5公眾號支付)/JSSDK的使用
掃二維碼關注,獲取更多技術分享 本文承接之前釋出的部落格《 微信支付V3微信公眾號支付PHP教程/thinkPHP5公眾號支付》必須閱讀上篇文章後才可以閱讀這篇文章。由於最近一段時間工作比較忙,部落格更新比較慢。如果有任何問題大家可以關注以上公眾
微信支付V3微信公眾號支付PHP教程/thinkPHP5公眾號支付
本篇文章是微信支付最新介面V3版本的PHP實踐教程,在該教程中主要使用的框架是thinkPHP5框架,如果你對thinkPHP5框架下的開發還不是很熟悉可以檢視相關的教程,當然在我的部落格中也有thinkPHP5的教程大家可以檢視。在本篇文章中我的主要目標