0

payumoney の統合に angular/node.js スタックを使用しています。

angular 側では、$http.post を使用してサーバー側 (node.js) のルート エンドポイントに次のように注文します。

$http.post('/placeOrder',order).success(function(data, status, headers, config){
      //handle responses on client side
      console.log("Successfully POSTED to payment gateway");
      window.location = "https://test.payu.in/_payment";
    }).error(function(data, status, headers, config) {
      console.log("Error in posting");
   });

実際の重い作業は node.js (サーバー側) で行われます。

router.post('/placeOrder', function(req, res, next){

hash_data = MERCHANT_KEY+'|'+txnid+'|'+amount+'|'+productinfo+'|'+firstname+'|'+email+'|'+udf1+'|'+udf2+'|'+udf3+'|'+udf4+'|'+udf5+'||||||'+SALT;

var data = querystring.stringify({

      'key': MERCHANT_KEY,
      'txnid': txnid,
      'amount': amount,
      'productinfo': productinfo,
      'firstname': firstname,
      'email': email,
      'phone': phone,
      'surl': SUCCESS_URL,  
      'furl': FAILURE_URL,
      'curl': FAILURE_URL,
      'hash': hash,
      'service_provider': SERVICE_PROVIDER
      //'salt': SALT
    });

    //POST options
    var POST_OPTIONS = {
        hostname: PAYU_BASE_URL,
        port: 443,
        path: '/_payment',
        method: 'POST',
        //json: true,
        agent: false,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            //'Content-Length': Buffer.byteLength(data)
            'Content-Length': data.length
        }
    };

    var resp_status = "";

    var req = https.request(POST_OPTIONS, function(response) {
        console.log('STATUS: ' + response.statusCode);
        console.log('HEADERS: ' + JSON.stringify(response.headers));
        response.setEncoding('utf8');
        response.on('data', function (chunk) {
            console.log("body: " + chunk);
            resp_status = 200;
            res.json(chunk);
        });
        response.on('error', function (err) {
            console.log("Got error: " + err.message);
            resp_status = 500;
            return res.send(err);
        });
    });
    req.end(data);

ただし、このアプローチを使用すると POST が機能しないように見えるため、これは機能しないようです。ネットワークタブを介してブラウザーでデバッグしている間、常に次のように表示されます。

リクエストURL:https ://test.payyu.in/_payment リクエスト方法:GET ステータスコード:200 OK

また、テスト支払いページ ( https://test.payu.in/_payment ) には、「エラーの理由 1 つ以上の必須パラメーターがトランザクション要求にありません」と表示されます。

どんな助けでも大歓迎です!!

4

3 に答える 3

0

これをどのように実装しましたか..

  1. Jquery を使用してフォームを作成する
  2. sha512 を使用してハッシュコードを作成します。(Bower インストール js-sha512)

 var hashString = this.merchantKey+'|'+ options.uid +'|'+ options.totalPrice + '|'+'options.uid + '|' +
        options.recipient_name + '|'+ options.email +'|||||||||||'+ this.merchantSalt ;

    var hash = sha512(hashString);





    var key1 = $('<input></input>').attr('type', 'hidden').attr('name', "key").val("merchantKey");

    var key2 = $('<input></input>').attr('type', 'hidden').attr('name', "txnid").val(options.uid);

    var key3 = $('<input></input>').attr('type', 'hidden').attr('name', "amount").val(options.totalPrice);

    var key4 = $('<input></input>').attr('type', 'hidden').attr('name', "productinfo").val(options.uid);

    var key5 = $('<input></input>').attr('type', 'hidden').attr('name', "firstname").val(options.recipient_name);

    var key6 = $('<input></input>').attr('type', 'hidden').attr('name', "email").val(options.email);

    var key7 = $('<input></input>').attr('type', 'hidden').attr('name', "phone").val(options.phone);

    var key8 = $('<input></input>').attr('type', 'hidden').attr('name', "surl").val("http://192.168.43.121/payment/success");

    var key9 = $('<input></input>').attr('type', 'hidden').attr('name', "furl").val("http://192.168.43.121/payment/error");

    var key10 = $('<input></input>').attr('type', 'hidden').attr('name', "hash").val(hash);

    var key11 = $('<input></input>').attr('type', 'hidden').attr('name', "service_provider").val("payu_paisa");


    var form = $('<form/></form>');

    form.attr("id", "payuform");

    form.attr("action", this.payumoneyLink );

    form.attr("method", "POST");

    form.attr("style", "display:none;");

    form.append(key1, key2, key3, key4, key5, key6, key7, key8, key9,key10, key11);


    $("body").append(form);

    // submit form

    form.submit();

これは、StacksOverflow に関する私の最初の回答です。それが役に立てば幸い!

于 2017-07-04T17:45:04.993 に答える