Nie jestem w stanie zweryfikować podpisu płatności.

Więc to jest kod dostarczony przez Razorpay.

 $attributes  = array('razorpay_signature'  => $razorpay_signature,  'razorpay_payment_id'  => $razorpay_payment_id , 'razorpay_order_id' => $razorpay_order_id);
 $signatureVerified  = $api->utility->verifyPaymentSignature($attributes);

kiedy to sprawdzę.

if($signatureVerified) {
    echo 'signature verified';
} else {
   echo "signature didn't verify";
}

Otrzymuję tylko, że podpis nie został zweryfikowany.

P.s: Mam podpis płatności, identyfikator zamówienia i identyfikator płatności od razorpay.

0
Developer Stack 19 listopad 2019, 14:28

2 odpowiedzi

Funkcja niczego nie zwraca, po prostu zgłasza wyjątek, gdy podpis się nie zgadza. To wydaje się mylić wielu ludzi, więc istnieje PR, aby dodać wartość zwracaną: Link . Zostanie uwzględniony w następnym wydaniu.

1
thatharmansingh 19 listopad 2019, 14:37
Dziękuję za odpowiedź. ale nadal otrzymuję podpis nie zweryfikowany.
 – 
Developer Stack
19 listopad 2019, 14:45
Tak, a ta odpowiedź wyjaśnia dlaczego. Robisz if($signatureVerified), co nigdy nie zadziała, ponieważ verifyPaymentSignature nie zwraca wartości i zawsze nie powiedzie się if.
 – 
ceejayoz
19 listopad 2019, 16:12
Po prostu wywołaj funkcję. Nie rób nic ze zwracaną wartością. Jeśli funkcja działa, Twój podpis jest zgodny. Jeśli funkcja zgłosi wyjątek, Twój podpis nie jest zgodny.
 – 
thatharmansingh
20 listopad 2019, 15:19

Właściwie nie musisz przypisywać zmiennej do weryfikacji płatności.
Musisz go umieścić w bloku try catch, aby przeprowadzić weryfikację
tak jak to.

         try{
            $attributes = array(
                'razorpay_order_id' => $request->razorpay_order_id,
                'razorpay_payment_id' => $request->razorpay_payment_id,
                'razorpay_signature' => $request->razorpay_signature
            );
            $api->utility->verifyPaymentSignature($attributes);
        }
        catch(SignatureVerificationError $e){
            $response = 'failure' ;       
            $error = 'Razorpay Error : ' . $e->getMessage();
        }
   return response('success');

Tak więc, w przypadku niepowodzenia, przejdzie w blok catch, albo zwróci sukces

1
Khalid Khan 19 listopad 2019, 18:19
Czy możesz mi powiedzieć, jaka jest odpowiedź?
 – 
Developer Stack
19 listopad 2019, 17:10
W tym przypadku istnieją dwa rodzaje odpowiedzi; pierwszy jest od razorpay, jeśli Twoja płatność się nie powiedzie, otrzymasz odpowiedź jako błąd w bloku catch, a jeśli się nie powiedzie, nie otrzymasz odpowiedzi, gdzie musisz przekazać własną odpowiedź jako „sukces” lub jakakolwiek inne słowo kluczowe, które wybrałeś w swojej funkcji zwrotnej
 – 
Khalid Khan
19 listopad 2019, 18:22