2012-04-02 17 views
8

मैं एक ऐसा एप्लिकेशन बनाना चाहता हूं जहां उपयोगकर्ता के पास मेरी साइट से उत्पादों को खरीदने की क्षमता होगी। खरीद में वे भौतिक सामान शामिल होंगे जो वे खरीद रहे हैं, शिपिंग कर रहे हैं, लागू होने पर कर, आदि। मुझे पता है कि पेपैल के पास भुगतान के लिए कई विकल्प उपलब्ध हैं, जिनमें से एक वेब सेवा है, अन्य बस अपनी साइट पर रीडायरेक्ट कर रही है। मैं उपयोगकर्ता के अनुभव को जितना संभव हो सके निर्बाध होना चाहता हूं, लेकिन मैं क्रेडिट कार्ड आदि संग्रहित करने के व्यवसाय में नहीं जाना चाहता हूंप्ले करें! फ्रेमवर्क भुगतान हैंडलिंग (ईकामर्स/पेपैल)

यदि मैं अपने सर्वर पर लेनदेन संभालता हूं (सुरक्षित कनेक्शन/एसएसएल के साथ)), क्या मैं प्रसंस्करण के लिए अपनी सेवा में क्रेडिट कार्ड की जानकारी को पारित करने का जोखिम भी लगाऊंगा?

उत्तर

11

Play! फ्रेमवर्क v1.2 वेब सर्विसेज के लिए बहुत अच्छा समर्थन है। Play के लिए कोई पेपैल मॉड्यूल नहीं है, लेकिन कोड लिखना बहुत जटिल नहीं है। मैंने अपने जॉब बोर्ड (www.express-board.fr) के लिए वेब सेवा समाधान लागू किया और इसमें 3 दिन लगे।

पहला: उपयोगकर्ता हमेशा पेपैल वेबसाइट पर रीडायरेक्ट किया जाता है। पेपैल क्लाइंट का सामना करने के साथ कोई समाधान नहीं है। यदि आप Webservice समाधान (developer.paypal.com) के लिए जाते हैं तो आप अपने लोगो के साथ पेपैल वेब पेज को कस्टमाइज़ कर सकते हैं। यह सबसे अच्छा उपाय नहीं है, लेकिन यह कारगर है।

प्ले तरफ, यहाँ कि Paypal वेब सेवा का उपयोग करता है एक चेकआउट पद्धति के लिए एक नमूना कोड, है:

public static void checkout() { 
    Double amount = Double.parseDouble(session.get("amount")); 
    Long userId = Long.parseLong(session.get("user-id")); 
    User user = User.findById(userId); 
    if (user != null) { 
     renderArgs.put("user", user); 
    } 

    // we calculate the net and gross amount with French V.A.T (19.6%) 
    BigDecimal amountBD = new BigDecimal(amount * 1.196); 
    BigDecimal netAmountBD = new BigDecimal(amount); 
    BigDecimal taxAmountBD = amountBD.subtract(netAmountBD); 

    String netAmount = netAmountBD.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString(); 
    String totalAmount = amountBD.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString(); 
    String taxAmount = taxAmountBD.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString(); 

    String subject="Publication d'une offre d'emploi"; 


// Paypal Web service callback executed by Play! 
// I have a paypal.api.server configuration property with prod and sandbox server 

    WS.HttpResponse res = WS.url(Play.configuration.get("paypal.api.server").toString() + 
      "&USER=%s" + 
      "&PWD=%s" + 
      "&SIGNATURE=%s" + 
      "&VERSION=%s" + 
      "&METHOD=%s" + 
      "&PAYMENTREQUEST_0_PAYMENTACTION=%s" + 
      "&LANDINGPAGE=%s" + 
      "&SOLUTIONTYPE=%s" + 
      "&EMAIL=%s" + 
      "&FIRSTNAME=%s" + 
      "&LASTNAME=%s" + 
      "&STREET=%s" + 
      "&STREET2=%s" + 
      "&CITY=%s" + 
      "&ZIP=%s" + 
      "&STATE=%s" + 
      "&PAYMENTREQUEST_0_CURRENCYCODE=%s" + 
      "&MAXAMT=%s" + 
      "&PAYMENTREQUEST_0_AMT=%s" + 
      "&PAYMENTREQUEST_0_ITEMAMT=%s" + 
      "&PAYMENTREQUEST_0_TAXAMT=%s" + 
      "&PAYMENTREQUEST_0_DESC=%s" + 
      "&L_PAYMENTREQUEST_0_NAME0=%s" + 
      "&L_PAYMENTREQUEST_0_NUMER0=%s" + 
      "&L_PAYMENTREQUEST_0_DESC0=%s" + 
      "&L_PAYMENTREQUEST_0_AMT0=%s" + 
      "&L_PAYMENTREQUEST_0_QTY0=%s" + 

      "&NOSHIPPING=%s" + 
      "&LOCALECODE=%s" + 
      "&RETURNURL=%s" + 
      "&CANCELURL=%s" + 
      "&ADDROVERRIDE=%s" + 
      "&BRANDNAME=%s" 
      , 
      //------- 
      Play.configuration.get("paypal.api.username").toString(), 
      Play.configuration.get("paypal.api.password").toString(), 
      Play.configuration.get("paypal.api.signature").toString(), 
      "69.0", // API Version 
      "SetExpressCheckout", //Method 
      "Sale", 
      "Billing", 
      "Sole", 
      user.email, 
      "" + user.fullname, 
      "" + user.fullname, 
      "" + user.postalAddress, 
      "" + user.postalAddress2, 
      "" + user.city, 
      "" + user.zip, 
      "None", 
      "EUR", 
      totalAmount, //MaxAMT 
      totalAmount, //amount.toString() 
      netAmount, //PAYMENTREQUEST_n_ITEMAMT 
      taxAmount, 
      subject, 
      //--------- 
      "Item name", 
      "1", 
      subject, 
      netAmount, 
      "1", 
      //--------- 
      "1", 
      "FR", 
      Play.configuration.get("paypal.returnUrl").toString(), 
      Play.configuration.get("paypal.cancelPay").toString(), 
      "1", //ADDROVERRIDE 
      "eXpress-Board pour Innoteria" 
    ).get(); 


    String message = res.getString(); 
    PaypalResponse paypalResponse = new PaypalResponse(message); 
    if (paypalResponse.isSuccess()) { 
     Payment payment = new Payment(); 
     payment.userId = user.id; 
     payment.totalAmount = totalAmount; 
     payment.netAmount = netAmount; 
     payment.taxAmount = taxAmount; 
     payment.token = paypalResponse.getToken(); 
     payment.correlationID = paypalResponse.getCorrelationID(); 
     payment.save(); 

     redirect(Play.configuration.get("paypal.api.http").toString() + "/cgi-bin/webscr?cmd=_express-checkout&token=" + paypalResponse.getToken()); 
    } 

    Logger.error("Error on SetExpressCheckout with: "); 
    for (String tokens : message.split("&")) { 
     try { 
      Logger.error(URLDecoder.decode(tokens, "UTF-8")); 
     } catch (UnsupportedEncodingException e) { 
     } 
    } 

    error("Error from Paypal"); 

} 

आशा है कि यह मदद करता है

+0

क्या है ** उपयोगकर्ता ** ??? क्या यह एक वर्ग है ?? या कुछ और ?? –

+0

और स्कैला _ ** build.sbt ** _? में ** डब्ल्यूएस ** निर्भरता कैसे जोड़ें? –

+0

जहां मुझे कक्षा ** PaypalResponse ** मिल सकती है? –

संबंधित मुद्दे