मैं नोड.जेएस और एक्सप्रेस का उपयोग कर ट्रायलपे से भेजे गए एक संदेश को प्रमाणित करने का प्रयास कर रहा हूं। ट्रायलपे एचएमएसी-एमडी 5 हैश के साथ अनुरोधों पर हस्ताक्षर करता है, और सत्यापन पर these instructions प्रदान करता है।एचडीएसी एमडी 5 प्रमाणीकरण नोड.जेएस, एक्सप्रेस और ट्रायलपे
app.post('/trialpay', function(req, res) {
var key = "[MY MERCHANT KEY]";
var hash = req.header("TrialPay-HMAC-MD5");
var data = req.body.toString();
var crypted = require("crypto").createHmac("md5", key)
.update(data)
.digest("hex");
if (hash == crypted) {
res.writeHead(200, {"Content-Type": "plain/text"});
res.end("Success!");
} else {
throw new Error("Invalid TrialPay Hash");
}
});
यह वह जगह है, जाहिर है, (हैश से मेल नहीं खाता) काम नहीं कर रहा:
यह मेरा कोड है।
अस्वीकरण: मैं नोड.जेएस के लिए बेहद नया हूं, और इसके साथ शुरू करने के लिए थोड़ा जावास्क्रिप्ट अनुभव है।
अद्यतन
मुझे नहीं पता था कि लिंक संरक्षित किया गया।
ट्रायलपे आपके सूचना-कुंजी (आपकी खाता जानकारी में सेट) एचएमएसी पर हस्ताक्षर करने के लिए गुप्त कुंजी के रूप में उपयोग करता है। GET के लिए प्रश्न स्ट्रिंग अनुरोध करता है जो प्रश्न चिह्न (यूआरएल में) का पालन करता है। POST अनुरोध के लिए पूरे पोस्ट बॉडी पर हस्ताक्षर किए गए हैं।
यहाँ कैसे TrialPay का निर्देश देता गूगल एप इंजन (अजगर) में मान्य करने के लिए का एक उदाहरण है:
{
oid: 'sample-order-id',
sid: 'customer-sid',
order_date: '04/24/2012',
timestamp: '04/24/2012 16:28:46',
first_name: 'customer-firstname',
last_name: 'customer-lastname',
email: '[email protected]',
revenue: '10.00',
zip_code: '94041',
country: 'US'
}
:
class MyHandler(webapp.RequestHandler):
def post(self):
key = '[YOUR MERCHANT KEY]'
tphash = self.request.headers['TrialPay-HMAC-MD5']
if hmacmd5(key,self.request.body) != tphash:
logging.info('invalid trialpay hash')
return
अद्यतन के रूप में 2
req.body
प्रिंट बाहर
आपका लिंक काम नहीं करता है - यह मुझे लॉग इन करने नहीं देगा। उसने कहा, आपको अपने अनुरोध हैंडलर (मूल रूप से, नोड में कहीं भी) के अंदर 'फेंकने' से स्पष्ट रहना चाहिए। तीसरे पैरामीटर को स्वीकार करें (कॉलबैक, 'अगली' एक्सप्रेस लिंगो में) और त्रुटि को इसके बजाय 'अगली' पर पास करें। या इससे भी बेहतर, यहां त्रुटि को संभालें, जहां आप कर सकते हैं, और 'res.send (403, 'अवैध परीक्षणप हैश')'। साथ ही, आप इस बात का जिक्र नहीं करते कि आप किस प्रकार का डेटा पोस्ट कर रहे हैं - यह देखना दिलचस्प होगा कि 'req.body' और विशेष रूप से' req.body.toString() 'में शामिल है, यदि आप 'console.log' कर सकते हैं । –
टिप्पणी और सलाह @LinusGThiel के लिए धन्यवाद। जब मैंने 'console.log (req.body.toString()) की कोशिश की, 'यह केवल प्रिंट करता है" [ऑब्जेक्ट ऑब्जेक्ट] "। कृपया मेरी अज्ञानता को यहां क्षमा करें। –
मुझे यही संदेह है! 'Console.log (req.body) 'आपको क्या देता है? –