অ্যাপল পে - অথরাইজডনেট কেবল লাইভ, স্যান্ডবক্সে কাজ করলে 153 ত্রুটি ফিরে আসে


14

প্রচুর নিবন্ধ সন্ধানের পরেও আমি আমার সমস্যার সমাধান খুঁজে পাইনি।

আমি আমার সাইটে অ্যাপলপে বোতাম সংহত করেছি এবং স্যান্ডবক্স মোডে সফলভাবে লেনদেন করেছি । অনুরোধটি উত্পন্ন করতে আমি অনুমোদনপ্রাপ্ত.net পিএইচপি এসডিকে ব্যবহার করছি। সমস্যাগুলি শুরু হয়েছিল যখন আমি লাইভে যেতে শুরু করি। Authorize.net এর বার্তাটি " পেমেন্ট ডেটা প্রক্রিয়াকরণে একটি ত্রুটি হয়েছিল was ডিক্রিপ্টড ডেটা থেকে প্রয়োজনীয় ক্ষেত্রগুলি অনুপস্থিত "

এখানে আমি কি করেছি:

  1. লাইভ অথরাইজডনেট অ্যাকাউন্ট থেকে একের সাথে অর্থপ্রদান প্রক্রিয়াজাতকরণ শংসাপত্র পরিবর্তন করা হয়েছে
  2. আমি একই লাইভ অ্যাকাউন্টে অনুমোদন.এনএফ পেমেন্টগুলি প্রক্রিয়া করার জন্য শংসাপত্রগুলি পরিবর্তিত করেছি আমি পেমেন্ট প্রক্রিয়া শংসাপত্র পেয়েছি
  3. আসল ক্রেডিট কার্ড সহ লাইভ অ্যাপল ডিভাইস ব্যবহার করুন।
  4. আমি প্রথম তথ্য ন্যাশভিল প্রসেসরটি সিসি প্রসেসর হিসাবে ব্যবহার করছি যা অ্যাপলপে সমর্থন করে

মনে রাখবেন যে আমি যদি স্যান্ডবক্স মোডে ফিরে যাই, তবে লেনদেন সমস্যা ছাড়াই পাস করে passes

অনুরোধ এবং ব্যর্থ প্রতিক্রিয়া নিম্নলিখিত:

অনুরোধ:

{ 
    "createTransactionRequest":{ 
        "merchantAuthentication":{ 
            "name":"xxxxxxxxx",
            "transactionKey":"xxxxxxxxxxx"
        },
        "clientId":"sdk-php-2.0.0",
        "refId":"ref1575669789",
        "transactionRequest":{ 
            "transactionType":"authOnlyTransaction",
            "amount":"14.08",
            "payment":{ 
                "opaqueData":{ 
                    "dataDescriptor":"COMMON.APPLE.INAPP.PAYMENT",
                    "dataValue":"eyJ2ZXJzaW9u...Q1OSJ9fQ=="
                }
            },
            "order":{ 
                "invoiceNumber":"63059-191206",
                "description":"xxxxxxxxx, xxxxxxxxxxxx v9.0.12 (Order# 63059-191206)"
            },
            "customer":{ 
                "type":"individual",
                "email":""
            },
            "billTo":{ 
                "firstName":"xxxxxxx",
                "lastName":"xxxxxxx",
                "address":"xxxx San Remo Cir ",
                "city":"Vista",
                "state":"CA",
                "zip":"92084",
                "country":"US"
            },
            "retail":{ 
                "marketType":0,
                "deviceType":8
            },
            "transactionSettings":{ 
                "setting":[ 
                    { 
                        "settingName":"duplicateWindow",
                        "settingValue":"60"
                    }
                ]
            }
        }
    }
}

প্রতিক্রিয়া:

{
    "transactionResponse":{
        "responseCode":"3",
        "authCode":"",
        "avsResultCode":"P",
        "cvvResultCode":"",
        "cavvResultCode":"",
        "transId":"0",
        "refTransID":"",
        "transHash":"",
        "testRequest":"0",
        "accountNumber":"",
        "accountType":"",
        "errors":[
            {
                "errorCode":"153",
                "errorText":"There was an error processing the payment data. Required fields are missing from decrypted data."
            }
        ],
        "transHashSha2":"",
        "SupplementalDataQualificationIndicator":0
    },
    "refId":"ref1575669789",
    "messages":{
        "resultCode":"Error",
        "message":[
            {
                "code":"E00027",
                "text":"The transaction was unsuccessful."
            }
        ]
    }
}

আমি কী মিস করছি?

সম্পাদনা করুন:

অ্যাপলপে থেকে অস্বচ্ছ ডেটা প্রেরণ সম্পর্কিত কোড এখানে

$transactionMode = $cc_authorize_mode == $this->MODE_TEST ? \net\authorize\api\constants\ANetEnvironment::SANDBOX : \net\authorize\api\constants\ANetEnvironment::PRODUCTION;
$merchantAuthentication = new AnetAPI\MerchantAuthenticationType();
$merchantAuthentication->setName($cc_authorize_loginid);
$merchantAuthentication->setTransactionKey($cc_authorize_txnkey);

// Set the transaction's refId
$refId = 'ref' . time();
$phoneNumber = ! empty($co_b_phone) ? $co_b_phone : $co_phone;
$customerEmail = ! empty($co_b_email) ? $co_b_email : $co_email;
$ip = lloader()->getUtilByName('ip')->getClientIp();

// Create order information
$order = new AnetAPI\OrderType();
$order->setInvoiceNumber($order_number);
$order->setDescription($this->getOrderPostedByMessage($id_order, $order_number));

// Set the customer's Bill To address
$customerAddress = new AnetAPI\CustomerAddressType();
$customerAddress->setFirstName($co_ccholder_firstname);
$customerAddress->setLastName($co_ccholder_lastname);
if (! empty($co_b_company)) { $customerAddress->setCompany($co_b_company); }
$customerAddress->setAddress($co_b_address." ".$co_b_address2);
$customerAddress->setCity($co_b_city);
$bState = f_isUSState($co_b_state) ? $STATES_XX[$co_b_state] : $STATES[$co_b_state];
$customerAddress->setState($bState);
$customerAddress->setZip($co_b_zip);
$customerAddress->setCountry($countriesISO2[$co_country]);
$customerAddress->setPhoneNumber($phoneNumber);
$customerAddress->setEmail($customerEmail);

// Set the customer's identifying information
$customerData = new AnetAPI\CustomerDataType();
$customerData->setType("individual");
if ( ! empty($member_row['id'])) { $customerData->setId($member_row['id']); }
$customerData->setEmail($customerEmail);


// Add values for transaction settings
$duplicateWindowSetting = new AnetAPI\SettingType();
$duplicateWindowSetting->setSettingName("duplicateWindow");
$duplicateWindowSetting->setSettingValue("60");

// Create a TransactionRequestType object and add the previous objects to it
$transactionRequestType = new AnetAPI\TransactionRequestType();
$transactionRequestType->setCustomerIP($ip);
$transactionRequestType->setTransactionType($this->api_trtype_map[$transactionType]);
if (empty($this->applePayPaymentData)) {
            // Normal CC request
            // Create the payment data for a credit card
            ...
} else {
    $retail = new AnetAPI\TransRetailInfoType();
    $retail->setMarketType('0');
    $retail->setDeviceType('8');
    $transactionRequestType->setRetail($retail);

    // Apple Pay Token Request
    $op = new AnetAPI\OpaqueDataType();
    $op->setDataDescriptor("COMMON.APPLE.INAPP.PAYMENT");
    $paymentToken = base64_encode($this->applePayPaymentData);
    $op->setDataValue($paymentToken);
    $payment = new AnetAPI\PaymentType();
    $payment->setOpaqueData($op);
}

$transactionRequestType->setAmount($grandTotal);
$transactionRequestType->setOrder($order);
$transactionRequestType->setPayment($payment);
$transactionRequestType->setBillTo($customerAddress);
$transactionRequestType->setCustomer($customerData);
$transactionRequestType->addToTransactionSettings($duplicateWindowSetting);

// Assemble the complete transaction request
$request = new AnetAPI\CreateTransactionRequest();
$request->setMerchantAuthentication($merchantAuthentication);
$request->setRefId($refId);
$request->setTransactionRequest($transactionRequestType);

// Create the controller and get the response
$controller = new AnetController\CreateTransactionController($request);
$response = $controller->executeWithApiResponse($transactionMode);
if ($response != null) {
    if ($response->getMessages()->getResultCode() == "Ok") {
       ...
       if ($tresponse != null && $tresponse->getMessages() != null) {
          ...
          return true;
       } else {
          if ($tresponse->getErrors() != null) {
             ...
          }
       }
        ...
    }
    ...
}

EDIT2:

অনুরোধটিতে আমি একই ফলাফল সহ ইমেল এবং ফোন এবং আইপি ঠিকানা যুক্ত করেছি। পরিবর্তিত অনুরোধটি নিম্নলিখিত:

{ 
"createTransactionRequest":{ 
    "merchantAuthentication":{ 
        "name":"**********",
        "transactionKey":"***************"
    },
    "clientId":"sdk-php-2.0.0",
    "refId":"ref1576180306",
    "transactionRequest":{ 
        "transactionType":"authOnlyTransaction",
        "amount":"14.08",
        "payment":{ 
            "opaqueData":{ 
                "dataDescriptor":"COMMON.APPLE.INAPP.PAYMENT",
                "dataValue":"eyJ2ZXJzaW9uIj...DFiZiJ9fQ=="
            }
        },
        "order":{ 
            "invoiceNumber":"63117-191212",
            "description":"******************* v9.0.12 (Order# 63117-191212)"
        },
        "customer":{ 
            "type":"individual",
            "email":"*********@gmail.com"
        },
        "billTo":{ 
            "firstName":"Gabe",
            "lastName":"Garcia",
            "address":"********* Cir ",
            "city":"Vista",
            "state":"CA",
            "zip":"92084",
            "country":"US",
            "phoneNumber":"**************",
            "email":"**********@gmail.com"
        },
        "customerIP":"************",
        "retail":{ 
            "marketType":"0",
            "deviceType":"8"
        },
        "transactionSettings":{ 
            "setting":[ 
                { 
                    "settingName":"duplicateWindow",
                    "settingValue":"60"
                }
            ]
        }
    }
}

}


1
শংসাপত্র পুনরায় তৈরি করার চেষ্টা করা হয়েছে?
মুলি

1
হ্যাঁ, আমি পেমেন্ট প্রসেসিং শংসাপত্রগুলি কয়েকবার পুনরায় জেনারেট করেছি, এমনকি অ্যাপল অ্যাকাউন্টে বণিক পরিচয়ও পুনরায় তৈরি করেছি।
bksi

1
লেনদেনের অনুরোধ -> গ্রাহক -> ইমেল খালি, এটি সেট করার প্রয়োজন হতে পারে, অনুরোধে সেট করা সম্ভব?
জেনেস বোটিস

1
"OpaqueData" ফিল্ড স্থাপনের সাথে সম্পর্কিত কোডটি আপনি পোস্ট করতে পারেন? এটি অ্যাপলপে ওয়ালেট থেকে প্রাপ্ত বেস 64 এনকোডড টোকেন হওয়া উচিত।
দিনুশনেট

2
টুইটগুলি দেখুন আমি পোস্টটি সম্পাদনা করেছি। নোট করুন যে একই কোডটি স্যান্ডবক্স মোডে কাজ করে। অনুরোধটি উত্পন্ন হয়, এবং দেখা যায়। এটি কীভাবে উত্পন্ন হয় তা আমি ভাবি এর সাথে এটি বেশি নয়।
bksi

উত্তর:


3

এটি সম্ভবত ওপেকডাটা ক্ষেত্রের ডেটা ইস্যুর কারণে যা অ্যাপলপে পাশ থেকে আসে। সুতরাং আমার পরামর্শটি হ'ল লগফাইলে সেই টোকেনটি মুদ্রণ করুন, তারপরে সেখানে সমস্ত ডেটা উপস্থিত রয়েছে কিনা তা নিজে নিজে যাচাই করতে নীচের একটি লাইব্রেরি ব্যবহার করে একই ডিক্রিপ্ট করুন। আপনি স্যান্ডবক্স পরিবেশ এবং লাইভ পরিবেশ উভয়ের জন্য একই কাজ করতে পারেন। সুতরাং আপনি টোকেন ডেটাতে কোনও পার্থক্য দেখতে পাবেন।

https://github.com/PayU-EMEA/apple-pay

https://github.com/etsy/applepay-php


এটি এইভাবে etsy আপেলপেট-পিএইচপি লাইব্রেরি ব্যবহার করে ।

আপনার প্রয়োজন হবে একটি 'পেমেন্ট প্রসেসিং শংসাপত্র' এবং অ্যাপল থেকে একটি ব্যক্তিগত কী (নীচে Merch.cer এবং priv.p12 হিসাবে উল্লেখ করা হয়)। আপনি এগুলি অ্যাপলের ডেভ সেন্টারে তৈরি করতে পারেন। আপনার শেষ-ব্যবহারকারী ডিভাইসে উত্পন্ন অর্থপ্রদানের টোকেন এবং এটি তৈরি করা টাইমস্ট্যাম্পেরও দরকার হবে। একটি আরএসএ-এনক্রিপ্ট হওয়া টোকেনটি দেখতে দেখতে পাওয়া উচিত:

{
 "data": "<base64>",
 "header": {
     "applicationData": "<hex_optional>"
     "wrappedKey": "<base64>",
     "publicKeyHash": "<base64>",
     "transactionId": "<hex>"
 },
 "signature": "<base64>",
 "version": "RSA_v1"
}

ডেমো

$ # Copy in your payment processing cert and test token
$ cd examples
$ cp /secret/place/merch.cer .
$ cp /secret/place/token.json .
$
$ # Extract private key from cert
$ openssl pkcs12 -export -nocerts -inkey merch.key -out priv.p12 -password 'pass:'
$
$ # Get intermediate and root certs from Apple
$ wget -O int.cer 'https://www.apple.com/certificateauthority/AppleAAICAG3.cer'
$ wget -O root.cer 'https://www.apple.com/certificateauthority/AppleRootCA-G3.cer'
$
$ # Verify chain of trust
$ openssl x509 -inform DER -in merch.cer -pubkey > pub.pem
$ openssl x509 -inform DER -in root.cer > root.pem
$ openssl x509 -inform DER -in int.cer > int_merch.pem
$ openssl x509 -inform DER -in merch.cer >> int_merch.pem
$ openssl verify -verbose -CAfile root.pem int_merch.pem # should output OK
$
$ # Run demo
$ cd ..
$ php -denable_dl=on -dextension=`pwd`/modules/applepay.so examples/decrypt.php -p <privkey_pass> -c examples/token.json -t <time_of_transaction>

হ্যাঁ, এটি আমার পরবর্তী পদক্ষেপ। এটি করতে সক্ষম হতে আমাকে আমার পেমেন্ট প্রসেসিং শংসাপত্র তৈরি করতে হবে।
bksi

@bksi আপনি কি টোকেনগুলি ডিক্রিপ্ট করতে পারবেন?
দিনুশনেত

দুর্ভাগ্যক্রমে এখনও না। আমি github.com/PayU-EMEA/apple-pay
bksi

-1

যেমনটি এখানে উল্লেখ করা হয়েছে

দেখার জন্য কয়েকটি জিনিস:

  • আপনি আমাদের সাইটে যে অ্যাপল মার্চেন্ট আইডিটি প্রবেশ করেন তা অবশ্যই অ্যাপল সাইটে আপনার তৈরি করা একটির মতো হতে হবে। যদি এটি আলাদা হয় তবে আমরা প্রদানের ডেটা ডিক্রিপ্ট করতে সক্ষম হব না।
  • অবশ্যই একটি ই-বাণিজ্য লেনদেন হতে হবে। আপনার গেটওয়ে অ্যাকাউন্টটি একটি কার্ড-উপস্থিত অ্যাকাউন্ট হিসাবে সেট আপ করা হয়েছে তা নিশ্চিত করুন।
  • জমা দেওয়া ডেটা অবশ্যই বেস 64 এনকোডড থাকতে হবে। আমি যতদূর বলতে পারি, আপনি এটি সঠিকভাবে করছেন তবে ডাবল-চেক করুন। আমি জানি না যে
    আপনি যে ব্লগটি ফিরে আসছেন তা ইতিমধ্যে বেস 64 এনকোডড রয়েছে কিনা তবে আপনি এটি ডাবল-এনকোডিং করছেন না তা নিশ্চিত করতে ডাবল-চেক করুন।
  • opaqueData ক্ষেত্রটি ঠিক হওয়া উচিত নয় token.paymentData.data। পরিবর্তে, এটি Base64-encodedপুরোপুরি প্রতিনিধিত্ব করে একটি JSON স্ট্রিং হয়ে উঠবে token.paymentData object

অর্থ প্রদানের ডেটা প্রক্রিয়া করার সময় একটি ত্রুটি হয়েছিল।

  • উভয় অস্বচ্ছ পরামিতি নির্দিষ্ট করা আবশ্যক।
  • আপনি কার্ড নম্বর বা মেয়াদ শেষ হওয়ার তারিখ অন্তর্ভুক্ত করতে পারবেন না।
  • আপনি ট্র্যাক ডেটা অন্তর্ভুক্ত করতে পারবেন না।
  • অবশ্যই ই-বাণিজ্য লেনদেন হতে হবে। নিশ্চিত করুন যে আপনার গেটওয়ে অ্যাকাউন্টটি একটি কার্ড নয় উপস্থিত অ্যাকাউন্ট হিসাবে সেট আপ হয়েছে।
  • লেনদেনটি অনুমোদনের বা অনুমোদনের এবং লেনদেনের ধরণের ক্যাপচার হতে হবে।
  • আপনি 3DS ডেটা অন্তর্ভুক্ত করতে পারবেন না।
  • আপনাকে অবশ্যই এমন ডেটা জমা দিতে হবে যা সাফল্যের সাথে ডিক্রিপ্ট করা যায়।
  • ডিক্রিপ্ট করা ডেটা অবশ্যই মার্চেন্টের অনুরোধ জমা দেওয়ার অন্তর্ভুক্ত।
  • জমা দেওয়া ডেটা অবশ্যই বেস 64 এনকোডড থাকতে হবে।

পরামর্শের জন্য ধন্যবাদ। তাদের সব প্রয়োগ করা হয়। আমি নিশ্চিত নই যে আপনি উল্লেখ করেছেন যে স্যান্ডবক্স মোডে থাকাকালীন সমস্ত লেনদেন চলে। আমি সম্পূর্ণ নতুন মার্চেন্ট আইডি তৈরি করেছি এবং এটি একই ফলাফলের সাথে লেনদেনের জন্য ব্যবহার করেছি। তারপরে আমি একই আইডিটি আবার স্যান্ডবক্সে চেষ্টা করেছিলাম এবং লেনদেনগুলি পাস হচ্ছে।
bksi

@bksi আমার উত্তর আপডেট হয়েছে। দয়া করে নিশ্চিত হয়ে নিন যে আপনি সমস্ত চেকলিস্ট সম্পন্ন করেছেন এবং এখনও আপনি সমস্যার মুখোমুখি হয়ে আছেন তবে নতুন বান্ডিল শনাক্তকারী, মার্চেন্ট আইডি তৈরি, এটি বান্ডেল আইডিতে এবং নিবন্ধিত পোর্টালে নিবন্ধিত করে, অনুমোদিত পোর্টাল থেকে নতুন সিএসআর তৈরি করে পুরো প্রক্রিয়াটি পুনরায় করার
বিগনেশ কুমার এ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.