1. 程式人生 > >nodejs微信支付小微商戶申請入駐時,如何實現圖片上傳介面

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的教程大家可以檢視。在本篇文章中我的主要目標