diff --git a/api/gateway/paylinedata/PaylineRequest.cfc b/api/gateway/paylinedata/PaylineRequest.cfc index 3c77c0b..2f3149c 100644 --- a/api/gateway/paylinedata/PaylineRequest.cfc +++ b/api/gateway/paylinedata/PaylineRequest.cfc @@ -81,51 +81,10 @@ component if(!isNull(customer)){ var customer = customer.getMemento(); - for(var k in customer){ - - if(k EQ "address" && !isNull(customer[k])){ - var address = customer[k]; - //Should be elevated out to the customer themselves no? - addKey(ret, "first_name", address.getFirstName()); - addKey(ret, "last_name", address.getLastName()); - addKey(ret, "company", address.getcompany()); - addKey(ret, "address1", address.getaddress()); - addKey(ret, "address2", address.getAddress2()); - addKey(ret, "city", address.getCity()); - addKey(ret, "state", address.getState()); - addKey(ret, "zip", address.getZip()); - addKey(ret, "country", address.getcountry()); - addKey(ret, "phone", address.getphoneNumber()); - addKey(ret, "fax", address.getphoneNumber()); - addKey(ret, "email", address.getEmail()); - } - else if(k EQ "shippingaddress" && !isNull(customer[k])){ - var address = customer[k]; - addKey(ret, "shipping_firstname", address.getFirstName()); - addKey(ret, "shipping_lastname", address.getLastName()); - addKey(ret, "shipping_company", address.getcompany()); - addKey(ret, "shipping_address1", address.getaddress()); - addKey(ret, "shipping_address2", address.getAddress2()); - addKey(ret, "shipping_city", address.getCity()); - addKey(ret, "shipping_state", address.getState()); - addKey(ret, "shipping_zip", address.getZip()); - addKey(ret, "shipping_country", address.getcountry()); - addKey(ret, "shipping_phone", address.getphoneNumber()); - addKey(ret, "shipping_fax", address.getphoneNumber()); - addKey(ret, "shipping_email", address.getEmail()); + if(!isNull(customer[k])){ + addKey(ret, k, customer[k]); } - - - - //Dont add fields we don't have - else if(!isNull(customer[k])){ - addKey(ret, k, customer[k]); - } - - - - } } diff --git a/api/gateway/paylinedata/PaylineResponse.cfc b/api/gateway/paylinedata/PaylineResponse.cfc index 4a764d6..0264ef4 100644 --- a/api/gateway/paylinedata/PaylineResponse.cfc +++ b/api/gateway/paylinedata/PaylineResponse.cfc @@ -76,10 +76,11 @@ component var parsedResult = getResult(); if(isXML(getResult())){ - //We have to process this differently - + //We have to process this differently parseXMLResponse(getResult()); setParsedResult(parsedResult); + + } else { @@ -158,62 +159,36 @@ component setResponse(1); setMessage("Returned customer from customer_vault"); - var custData = { - 'customerVaultId': custXML.customer_vault_id.XMLText, - "taxId": custXML.customertaxid.XMLText, - "shippingCarrier": custXML.shipping_carrier.XMLText, - "trackingNumber": custXML.tracking_number.XMLText, - "shippingDate": custXML.shipping_date.XMLText, - "shipping": custXML.shipping.XMLText, - "ccHash": custXML.cc_hash.XMLText, - "ccbin": custXML.cc_bin.XMLText, - "processorId": custXML.processor_id.XMLText, - } - setCustomerVaultId( custXML.customer_vault_id.XMLText); + + var inputStruct = {}; + for(var field in custXML.XMLChildren){ + + inputStruct[field.xmlName] = field.XMLText; + + + } + - custData.address = new address({ - "firstName":custXML.first_name.XMLText, - "lastName":custXML.last_name.XMLText, - "company":custXML.company.XMLText, - "address":custXML.address_1.XMLText, - "address2":custXML.address_2.XMLText, - "city":custXML.city.XMLText, - "state":custXML.state.XMLText, - "zip":custXML.postal_code.XMLText, - "country":custXML.country.XMLText, - "phoneNumber":custXML.phone.XMLText, - "email":custXML.email.XMLText, - "faxNumber":custXML.fax.XMLText, - "cellPhoneNumber":custXML.cell_phone.XMLText, - "website":custXML.website.XMLText, - }); - custData.shippingAddress = new address({ - "firstName":custXML.shipping_first_name.XMLText, - "lastName":custXML.shipping_last_name.XMLText, - "address":custXML.shipping_address_1.XMLText, - "address2":custXML.shipping_address_2.XMLText, - "city":custXML.shipping_city.XMLText, - "state":custXML.shipping_state.XMLText, - "zip":custXML.shipping_postal_code.XMLText, - "country":custXML.shipping_country.XMLText, - "email":custXML.shipping_email.XMLText, - }); - var card = getService().createCreditCard(); card.setAccount(custXML.cc_number.XMLText); card.setMonth(Left(custXML.cc_exp.XMLText, 2)); card.setYear(Right(custXML.cc_exp.XMLText, 2)); + card.setIssueNumber(custXML.cc_issue_number.XMLText); - custData.card = card; + card.setStartMonth(Left(custXML.cc_start_date.XMLText, 2)); + card.setStartYear(Right(custXML.cc_start_date.XMLText, 2)); + + + inputStruct.card = card; - var customer = new customer(custData); + var customer = new customer().populate(inputStruct); setCustomer(customer); - return; + return this; } //get the root diff --git a/api/gateway/paylinedata/customer.cfc b/api/gateway/paylinedata/customer.cfc index 243a1d2..894486e 100644 --- a/api/gateway/paylinedata/customer.cfc +++ b/api/gateway/paylinedata/customer.cfc @@ -20,96 +20,239 @@ component accessors="true" { + //These properties are named in the same format so we can use the getMemento to create our sending packet property name="customerVaultId" getter="true" setter="true"; + + property name="card" getter="true" setter="true"; - property name="billingId" getter="true" setter="true"; - property name="taxId" getter="true" setter="true"; - property name="shippingCarrier" getter="true" setter="true"; - property name="trackingNumber" getter="true" setter="true"; - property name="shippingDate" getter="true" setter="true"; - property name="shipping" getter="true" setter="true"; - property name="cchash" getter="true" setter="true"; - property name="ccbin" getter="true" setter="true"; - property name="processorId" getter="true" setter="true"; + //Billing Info + property name="billingId" type="string" getter="true" setter="true"; + property name="firstName" type="string" getter="true" setter="true"; + property name="lastName" type="string" getter="true" setter="true"; + property name="company" type="string" getter="true" setter="true"; + property name="address" type="string" getter="true" setter="true"; + property name="address2" type="string" getter="true" setter="true"; + property name="city" type="string" getter="true" setter="true"; + property name="state" type="string" getter="true" setter="true"; + property name="zip" type="string" getter="true" setter="true"; + property name="country" type="string" getter="true" setter="true"; + property name="phoneNumber" type="string" getter="true" setter="true"; + property name="faxNumber" type="string" getter="true" setter="true"; + property name="email" type="string" getter="true" setter="true"; - property name="card" getter="true" setter="true"; + + //Shipping Info + property name="shippingId" type="string" getter="true" setter="true"; + property name="shippingFirstname" type="string" getter="true" setter="true"; + property name="shippingLastname" type="string" getter="true" setter="true"; + property name="shippingCompany" type="string" getter="true" setter="true"; + property name="shippingAddress" type="string" getter="true" setter="true"; + property name="shippingAddress2" type="string" getter="true" setter="true"; + property name="shippingCity" type="string" getter="true" setter="true"; + property name="shippingState" type="string" getter="true" setter="true"; + property name="shippingZip" type="string" getter="true" setter="true"; + property name="shippingCountry" type="string" getter="true" setter="true"; + property name="shippingPhoneNumber" type="string" getter="true" setter="true"; + property name="shippingFaxNumber" type="string" getter="true" setter="true"; + property name="shippingEmail" type="string" getter="true" setter="true"; + //property name="processor_id" getter="true" setter="true"; + + property name="payment" getter="true" setter="true" default="creditcard"; property name="orderid" getter="true" setter="true"; property name="orderDescription" getter="true" setter="true"; + + //Should be an array - property name="merchantDefinedFields" type="array" getter="true" setter="true"; + property name="merchantDefinedField1" type="string" getter="true" setter="true"; + property name="merchantDefinedField2" type="string" getter="true" setter="true"; + property name="merchantDefinedField3" type="string" getter="true" setter="true"; + property name="merchantDefinedField4" type="string" getter="true" setter="true"; + property name="merchantDefinedField5" type="string" getter="true" setter="true"; + property name="merchantDefinedField6" type="string" getter="true" setter="true"; + property name="merchantDefinedField7" type="string" getter="true" setter="true"; + property name="merchantDefinedField8" type="string" getter="true" setter="true"; + property name="merchantDefinedField9" type="string" getter="true" setter="true"; + property name="merchantDefinedField10" type="string" getter="true" setter="true"; + property name="merchantDefinedField11" type="string" getter="true" setter="true"; + property name="merchantDefinedField12" type="string" getter="true" setter="true"; + property name="merchantDefinedField13" type="string" getter="true" setter="true"; + property name="merchantDefinedField14" type="string" getter="true" setter="true"; + property name="merchantDefinedField15" type="string" getter="true" setter="true"; + property name="merchantDefinedField16" type="string" getter="true" setter="true"; + property name="merchantDefinedField17" type="string" getter="true" setter="true"; + property name="merchantDefinedField18" type="string" getter="true" setter="true"; + property name="merchantDefinedField19" type="string" getter="true" setter="true"; + property name="merchantDefinedField20" type="string" getter="true" setter="true"; + //returned fields? + property name="shippingCarrier" getter="true" setter="true"; + property name="shipping" getter="true" setter="true"; + property name="trackingNumber" getter="true" setter="true"; + property name="shippingDate" getter="true" setter="true"; + property name="cc_hash" getter="true" setter="true"; + property name="cc_bin" getter="true" setter="true"; // ponumber**** // tax**** // tax_exempt**** // shipping**** - - property name="address" getter="true" setter="true"; - property name="shippingaddress" getter="true" setter="true"; - - property name="shipping_id" getter="true" setter="true"; - property name="shipping_email" getter="true" setter="true"; - - - public function addMerchantDefinedFiled(String value){ - - var merchant = getMerchant_defined_fields(); - - if(isNull(merchant) || !isArray(merchant)){ - setMerchant_defined_fields([]); - } - - ArrayAppend(merchant, value); - setMerchant_defined_fields(merchant); - - return this; - } + //Takes a struct of data that comes in and populates the properties + public any function populate(struct indata){ + var funcMapping ={ + "customer_vault_id" : setCustomerVaultId, + "billing_id" : setBillingId, + "first_name" : setFirstName, + "last_name" : setLastName, + "company" : setCompany, + "address" : setAddress, + "address_1" : setAddress, + "address2" : setAddress2, + "address_2" : setAddress2, + "city" : setCity, + "state" : setState, + "zip" : setZip, + "postal_code" : setZip, + "country" : setCountry, + "phone_number" : setPhoneNumber, + "phone" : setPhoneNumber, + "fax_number" : setFaxNumber, + "fax" : setFaxNumber, + "email" : setEmail, + "shipping_id" : setShippingId, + "shipping_firstname" : setShippingFirstname, + "shipping_first_name" : setShippingFirstname, + "shipping_lastname" : setShippingLastname, + "shipping_last_name" : setShippingLastname, + "shipping_company" : setShippingCompany, + "shipping_address" : setShippingAddress, + "shipping_address_1" : setShippingAddress, + "shipping_address2" : setShippingAddress2, + "shipping_address_2" : setShippingAddress2, + "shipping_city" : setShippingCity, + "shipping_state" : setShippingState, + "shipping_zip" : setShippingZip, + "shipping_postal_code" : setShippingZip, + "shipping_country" : setShippingCountry, + "shipping_phone_number" : setShippingPhoneNumber, + "shipping_fax_number" : setShippingFaxNumber, + "shipping_email" : setShippingEmail, + //"processor_id" : setProcessorId, + "payment" : setPayment, + "orderid" : setOrderid, + "order_description" : setOrderDescription, + "merchant_defined_field1" : setMerchantDefinedField1, + "merchant_defined_field2" : setMerchantDefinedField2, + "merchant_defined_field3" : setMerchantDefinedField3, + "merchant_defined_field4" : setMerchantDefinedField4, + "merchant_defined_field5" : setMerchantDefinedField5, + "merchant_defined_field6" : setMerchantDefinedField6, + "merchant_defined_field7" : setMerchantDefinedField7, + "merchant_defined_field8" : setMerchantDefinedField8, + "merchant_defined_field9" : setMerchantDefinedField9, + "merchant_defined_field10" : setMerchantDefinedField10, + "merchant_defined_field11" : setMerchantDefinedField11, + "merchant_defined_field12" : setMerchantDefinedField12, + "merchant_defined_field13" : setMerchantDefinedField13, + "merchant_defined_field14" : setMerchantDefinedField14, + "merchant_defined_field15" : setMerchantDefinedField15, + "merchant_defined_field16" : setMerchantDefinedField16, + "merchant_defined_field17" : setMerchantDefinedField17, + "merchant_defined_field18" : setMerchantDefinedField18, + "merchant_defined_field19" : setMerchantDefinedField19, + "merchant_defined_field20" : setMerchantDefinedField20, + "shipping_carrier" : setShippingCarrier, + "shipping" : setShipping, + "tracking_number" : setTrackingNumber, + "shipping_date" : setShippingDate, + "cc_hash" : setCC_hash, + "cc_bin" : setCC_bin, + }; - public customer function populate(XML responseXML){ - - abort; - - // setMerchantCustomerId(getXMLElementText(responseXML, "merchantCustomerId")); - // setDescription(getXMLElementText(responseXML, "description")); - // setEmail(getXMLElementText(responseXML, "email")); - - - // //TODO: find out if this is actually correct and we get an array of paymentProfiles back, documentation is lacking at this point: - // //http://developer.authorize.net/api/reference/#customer-profiles-create-customer-profile - - // var paymentProfiles = XMLSearch(responseXML, "//:paymentProfiles"); - // for(var paymentProfile in paymentProfiles){ - // var pp = new paymentProfile(service=getService()).populate(paymentProfile); - // addPaymentProfile(pp); + //These are the keys that are ignored. We can ignore them generally + //var ignoredfields = "sec_code,check_name,account_holder_type,customertaxid,check_hash,processor_id,account_type,cc_issue_number,check_aba,check_account,cc_exp,website,cc_start_date,cc_number,cell_phone"; + for(var st in indata){ + if(st EQ "card"){ + //deal with cards differently? + setCard(indata[st]); + } + else if (structKeyExists(funcMapping, st)){ + funcMapping[st](indata[st]); //Called the mapped function + } - // } - + } return this; } - - - public Struct function getMemento(){ + var ret = { + "customer_vault_id" : getCustomerVaultId(), + "billing_id" : getBillingId(), + "first_name" : getFirstName(), + "last_name" : getLastName(), + "company" : getCompany(), + "address" : getAddress(), + "address2" : getAddress2(), + "city" : getCity(), + "state" : getState(), + "zip" : getZip(), + "country" : getCountry(), + "phone_number" : getPhoneNumber(), + "fax_number" : getFaxNumber(), + "email" : getEmail(), + "shipping_id" : getShippingId(), + "shipping_firstname" : getShippingFirstname(), + "shipping_lastname" : getShippingLastname(), + "shipping_company" : getShippingCompany(), + "shipping_address" : getShippingAddress(), + "shipping_address2" : getShippingAddress2(), + "shipping_city" : getShippingCity(), + "shipping_state" : getShippingState(), + "shipping_zip" : getShippingZip(), + "shipping_country" : getShippingCountry(), + "shipping_phone_number" : getShippingPhoneNumber(), + "shipping_fax_number" : getShippingFaxNumber(), + "shipping_email" : getShippingEmail(), + //"processor_id" : getProcessorId(), + "payment" : getPayment(), + "orderid" : getOrderid(), + "order_description" : getOrderDescription(), + "merchant_defined_field1" : getMerchantDefinedField1(), + "merchant_defined_field2" : getMerchantDefinedField2(), + "merchant_defined_field3" : getMerchantDefinedField3(), + "merchant_defined_field4" : getMerchantDefinedField4(), + "merchant_defined_field5" : getMerchantDefinedField5(), + "merchant_defined_field6" : getMerchantDefinedField6(), + "merchant_defined_field7" : getMerchantDefinedField7(), + "merchant_defined_field8" : getMerchantDefinedField8(), + "merchant_defined_field9" : getMerchantDefinedField9(), + "merchant_defined_field10" : getMerchantDefinedField10(), + "merchant_defined_field11" : getMerchantDefinedField11(), + "merchant_defined_field12" : getMerchantDefinedField12(), + "merchant_defined_field13" : getMerchantDefinedField13(), + "merchant_defined_field14" : getMerchantDefinedField14(), + "merchant_defined_field15" : getMerchantDefinedField15(), + "merchant_defined_field16" : getMerchantDefinedField16(), + "merchant_defined_field17" : getMerchantDefinedField17(), + "merchant_defined_field18" : getMerchantDefinedField18(), + "merchant_defined_field19" : getMerchantDefinedField19(), + "merchant_defined_field20" : getMerchantDefinedField20(), + "shipping_carrier" : getShippingCarrier(), + "shipping" : getShipping(), + "tracking_number" : getTrackingNumber(), + "shipping_date" : getShippingDate(), + "cc_hash" : getCC_hash(), + "cc_bin" : getCC_bin(), + }; - var ret = {}; - var proparr = getMetadata(this).properties; - - //mapped properties - - for(var prop in proparr){ - if(prop.name != "card"){ - ret[prop.name] = prop.getter? this["get#prop.name#"]() : variables[prop.name]; - } - else if(!isNull(getCard())) { + if(!isNull(getCard())) { ret["ccnumber"] = getCard().getAccount(); ret["ccexp"] = DateFormat(getCard().getExpirationDate(), "MMYY"); - - } } + + return ret; } diff --git a/api/gateway/paylinedata/paylinedata.cfc b/api/gateway/paylinedata/paylinedata.cfc index 5d63079..754c0da 100644 --- a/api/gateway/paylinedata/paylinedata.cfc +++ b/api/gateway/paylinedata/paylinedata.cfc @@ -257,7 +257,40 @@ component } + function unstore(required String customer_vault_id ){ + var payload = []; + var auth = getMerchantAuthentication(); + + ArrayAppend(payload, { + "name": "customer_vault_id", + "value": customer_vault_id + }); + ArrayAppend(payload, { + "name": "customer_vault", + "value": "delete_customer" + }); + + + ArrayAppend(payload, { + "name": "username", + "value": auth.username + }); + ArrayAppend(payload, { + "name": "password", + "value": auth.password + }); + //Raw result + var result = super.process(payload = payload); + result["service"] = super.getService(); + result["testmode"] = super.getTestMode(); + + + + var resp = new PaylineResponse(argumentCollection=result); + return resp; + + } function getCustomer(required String customer_vault_id ){