Advertisement
Guest User

Untitled

a guest
Aug 5th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. /**
  4. * Protect direct access
  5. */
  6. if ( ! defined( 'ABSPATH' ) ) die( 'Sorry cowboy! This is not your place' );
  7.  
  8. if( ! class_exists( 'NC_Model_SF' ) )
  9. {
  10. class NC_Model_SF
  11. {
  12. private $username;
  13.  
  14. private $password;
  15.  
  16. private $token;
  17.  
  18. private $security_token;
  19.  
  20. private $con;
  21.  
  22. private $path;
  23.  
  24. protected function __construct( $base )
  25. {
  26. $this->username = defined( 'SF_USERNAME' ) && SF_USERNAME ? SF_USERNAME : '';
  27. $this->password = defined( 'SF_PASSWORD' ) && SF_PASSWORD ? SF_PASSWORD : '';
  28. $this->token = defined( 'SF_TOKEN' ) && SF_TOKEN ? SF_TOKEN : '';
  29. $this->security_token = $this->password . $this->token;
  30. $this->_init( $base );
  31. }
  32.  
  33. static public function get_instance( $base = 'enterprise' )
  34. {
  35. static $Inst = null;
  36. if( $Inst == null )
  37. {
  38. $Inst = new self( $base );
  39. }
  40.  
  41. return $Inst;
  42. }
  43.  
  44. private function _print_exception( $error )
  45. {
  46. echo "Exception " . $error->faultstring . "<br/><br/>\n";
  47. echo "Last Request: <br/><br/>\n";
  48. echo $this->con->getLastRequestHeaders();
  49. echo "<br/><br/>\n";
  50. echo $this->con->getLastRequest();
  51. echo "<br/><br/>\n";
  52. echo "Last Response:<br/><br/>\n";
  53. echo $this->con->getLastResponseHeaders();
  54. echo "<br/><br/>\n";
  55. echo $this->con->getLastResponse();
  56. }
  57.  
  58. private function _init( $base )
  59. {
  60. require_once ( NC_FILES_DIR . '/lib/salesforce/soapclient/SforcePartnerClient.php' );
  61. require_once ( NC_FILES_DIR . '/lib/salesforce/soapclient/SforceEnterpriseClient.php' );
  62.  
  63. if( $base = 'partner' )
  64. {
  65. try
  66. {
  67. $this->con = new SforcePartnerClient();
  68. $this->path = $this->con->createConnection( NC_FILES_DIR . '/lib/salesforce/soapclient/partner.wsdl.xml' );
  69. // This is for sandbox
  70. //$this->con->setEndpoint( 'https://cs43.salesforce.com/services/Soap/u/27.0' );
  71.  
  72. // This is live
  73. $this->con->setEndpoint( 'https://na15.salesforce.com/services/Soap/u/27.0' );
  74. }
  75. catch( Exception $e )
  76. {
  77. $this->_print_exception( $e );
  78. }
  79. }
  80. elseif( $base = 'enterprise' )
  81. {
  82. try
  83. {
  84. $this->con = new SforceEnterpriseClient();
  85. $this->path = $this->con->createConnection( NC_FILES_DIR . '/lib/salesforce/soapclient/enterprise.wsdl.xml' );
  86. $this->con->setEndpoint( 'https://na15.salesforce.com/services/Soap/c/27.0' );
  87. }
  88. catch( Exception $e )
  89. {
  90. $this->_print_exception( $e );
  91. }
  92. }
  93.  
  94. }
  95.  
  96. public function login()
  97. {
  98. $con = $this->con->login( $this->username, $this->security_token );
  99. }
  100.  
  101. public function create_account( $customer )
  102. {
  103. $records = array();
  104. $records[0] = new stdclass();
  105. $records[0]->fields = array(
  106. //'Name' => $customer['first_name'] . ' ' . $customer['last_name'],
  107. 'Name' => $customer['company'],
  108. 'Email_Address__c' => $customer['email'],
  109. 'Phone' => $customer['phone'],
  110. 'BillingCountry' => $customer['country'],
  111. 'BillingPostalCode' => $customer['postal_code'],
  112. //'BillingState' => 'AL',
  113. 'BillingStreet' => $customer['address'],
  114. 'BillingCity' => $customer['city'],
  115.  
  116. 'ShippingCountry' => $customer['country'],
  117. 'ShippingPostalCode' => $customer['postal_code'],
  118. //'BillingState' => 'AL',
  119. 'ShippingStreet' => $customer['address'],
  120. 'ShippingCity' => $customer['city']
  121. );
  122. $records[0]->type = 'Account';
  123.  
  124. try
  125. {
  126. $account = $this->con->create( $records, 'Account' );echo "<pre>";
  127. print_r($account);
  128. echo "</pre>";
  129. return $account[0]->id;
  130. }
  131. catch( Exception $e )
  132. {
  133. $this->_print_exception( $e );
  134. }
  135. }
  136.  
  137. public function create_contact( $account_id, $customer )
  138. {
  139. $records = array();
  140. $records[0] = new stdclass();
  141.  
  142. $records[0]->fields = array(
  143. 'FirstName' => $customer['first_name'],
  144. 'LastName' => $customer['last_name'],
  145. 'Email' => $customer['email'],
  146. 'Phone' => $customer['phone'],
  147. 'AccountId' => $account_id,
  148. 'MailingStreet' => $customer['address'],
  149. 'MailingCity' => $customer['city'],
  150. 'MailingPostalCode' => $customer['postal_code'],
  151. 'MailingStateCode' => $customer['state'],
  152. 'MailingCountryCode' => $customer['country'],
  153. );
  154. $records[0]->type = 'Contact';
  155.  
  156. try
  157. {
  158. $contact = $this->con->create( $records, 'Contact' );echo "<pre>";
  159. print_r($contact);
  160. echo "</pre>";
  161. return $contact[0]->id;
  162. }
  163. catch( Exception $e )
  164. {
  165. $this->_print_exception( $e );
  166. }
  167. }
  168.  
  169. public function create_opportunity( $account_id, $contact_id, $customer, $sf_custom_data )
  170. {
  171. $amount = ltrim( $sf_custom_data['data']['cart']['total'], '$' );
  172. $records = array();
  173. $records[0] = new stdclass();
  174. $records[0]->fields = array(
  175. 'Name' => 'Online Store - ' . $customer['company'] . ' - ' . date( 'Y-m-d' ),
  176. 'StageName' => 'closed won',
  177. 'CloseDate' => date( 'Y-m-d' ),
  178. 'AccountId' => $account_id,
  179. 'Amount' => $amount,
  180. 'Stripe_Card_ID__c' => $sf_custom_data['customer']['value']->default_source,
  181. 'Stripe_Customer_ID__c' => $sf_custom_data['customer']['value']->id,
  182. 'Stripe_Payment_ID__c' => $sf_custom_data['customer']['payment_id'],
  183. 'Stripe_Subscription_ID__c' => $sf_custom_data['customer']['value']->subscriptions->data[0]->id,
  184. 'Pricebook2Id' => 'xxxxxxxxxxxx'
  185. );
  186.  
  187. $records[0]->type = 'Opportunity';
  188.  
  189. try
  190. {
  191. $opportunity = $this->con->create( $records, 'Opportunity' );echo "<pre>";
  192. print_r($opportunity);
  193. echo "</pre>";
  194. return $opportunity[0]->id;
  195. }
  196. catch( Exception $e )
  197. {
  198. $this->_print_exception( $e );
  199. }
  200. }
  201.  
  202. public function OpportunityContactRole( $account_id, $contact_id, $opportunity_id, $customer, $sf_custom_data )
  203. {
  204. $records = array();
  205. $records[0] = new stdclass();
  206. $records[0]->fields = array(
  207. 'ContactId' => $contact_id,
  208. 'IsPrimary' => true,
  209. 'OpportunityId' => $opportunity_id,
  210. 'Role' => 'Technical Buyer'
  211. );
  212. $records[0]->type = 'OpportunityContactRole';
  213.  
  214. try
  215. {
  216. $OpportunityContactRole = $this->con->create( $records, 'OpportunityContactRole' );echo "<pre>";
  217. print_r($OpportunityContactRole);
  218. echo "</pre>";
  219. return $OpportunityContactRole[0]->id;
  220. }
  221. catch( Exception $e )
  222. {
  223. $this->_print_exception( $e );
  224. }
  225. }
  226.  
  227. public function create_quotes( $opportunity_id, $account_id, $contact_id, $customer, $sf_custom_data )
  228. {
  229. $records = array();
  230. $records[0] = new stdclass();
  231. $records[0]->fields = array(
  232. 'SBQQ__Opportunity2__c' => $opportunity_id,
  233. 'SBQQ__Primary__c' => '1',
  234. 'SBQQ__BillingCountry__c' => $customer['country'],
  235. 'ship_to_contact__c' => $contact_id,
  236. 'bill_to_contact__c' => $contact_id,
  237. 'SBQQ__SubscriptionTerm__c' => 12,
  238. 'SBQQ__StartDate__c' => date( 'Y-m-d' ),
  239. 'SBQQ__ExpirationDate__c' => date( 'Y-m-d', strtotime( '+1 years' ) ),
  240. //'discount__c' => '4',
  241. //'discount_reason__c' => 'Coupon'
  242. );
  243.  
  244. $discount = $sf_custom_data['data']['customer']['post_data']['nc_copuon_amount'];
  245. if( isset( $discount ) && $discount != '' )
  246. {
  247. $records[0]->fields['discount_reason__c'] = 'NGINX Product Coupon';
  248. // Need permission
  249. //$records[0]->fields['discount__c'] = number_format( $discount, 2, '.', '' );
  250. }
  251.  
  252. $records[0]->type = 'SBQQ__Quote__c';
  253.  
  254. try
  255. {
  256. $quotes = $this->con->create( $records, 'SBQQ__Quote__c' );echo "<pre>";
  257. print_r($quotes);
  258. echo "</pre>";
  259. return $quotes[0]->id;
  260. }
  261. catch( Exception $e )
  262. {
  263. $this->_print_exception( $e );
  264. }
  265. }
  266.  
  267. public function create_quoteLine( $opportunity_id, $account_id, $contact_id, $quote_id, $customer, $sf_custom_data )
  268. {
  269. $cart = $sf_custom_data['data']['cart'];
  270. $product_id = $cart['items'][0]['product_id'];
  271. $qty = $cart['items'][0]['qty'];
  272. $product = NC_Model_Product::get_instance( $product_id );
  273.  
  274. $query = "SELECT Name from Product2 WHERE Id = '" . $product->sf_product . "'";
  275. $queryResult = $this->con->query($query);
  276. for ($queryResult->rewind(); $queryResult->pointer < $queryResult->size; $queryResult->next()) {
  277. $record = $queryResult->current();
  278. $productName = $record->fields->Name;
  279. }
  280.  
  281. $records = array();
  282. $records[0] = new stdclass();
  283. $records[0]->fields = array(
  284. 'SBQQ__Quote__c' => $quote_id,
  285. 'SBQQ__Product__c' => $product->sf_product,
  286. 'SBQQ__Quantity__c' => $qty,
  287. 'SBQQ__Description__c' => $productName,
  288. 'SBQQ__SubscriptionTerm__c' => 12, // Opportunity Product term
  289. 'SBQQ__StartDate__c' => date( 'Y-m-d' ),
  290. 'SBQQ__EndDate__c' => date( 'Y-m-d', strtotime( '+1 years' ) )
  291. //'SBQQ__Discount_Reason__c' => 'Coupon'
  292. );
  293.  
  294. $discount = $sf_custom_data['data']['customer']['post_data']['nc_copuon_amount'];
  295. if( isset( $discount ) && $discount != '' )
  296. {
  297. $records[0]->fields['SBQQ__Discount__c'] = $discount;
  298. }
  299.  
  300. $records[0]->type = 'SBQQ__QuoteLine__c';
  301.  
  302. try
  303. {
  304. $quoteLine = $this->con->create( $records, 'SBQQ__QuoteLine__c' );echo "<pre>";
  305. print_r($quoteLine);
  306. echo "</pre>";
  307. return $quoteLine[0]->id;
  308. }
  309. catch( Exception $e )
  310. {
  311. $this->_print_exception( $e );
  312. }
  313. }
  314.  
  315. /*public function create_lineItems( $opportunity_id, $account_id, $contact_id, $customer, $sf_custom_data )
  316. {
  317. $cart = $sf_custom_data['data']['cart'];
  318. $product_id = $cart['items'][0]['product_id'];
  319. $qty = $cart['items'][0]['qty'];
  320. $product = NC_Model_Product::get_instance( $product_id );
  321.  
  322. $records = array();
  323. $records[0] = new stdclass();
  324. $records[0]->fields = array(
  325. 'OpportunityId' => $opportunity_id,
  326. 'PricebookEntryId' => '01s630000004YC3',
  327. 'Product2Id' => $product->sf_product
  328. );
  329.  
  330. $records[0]->type = 'OpportunityLineItem';
  331.  
  332. try
  333. {
  334. $OpportunityLineItem = $this->con->create( $records, 'OpportunityLineItem' );
  335. return $OpportunityLineItem[0]->id;
  336. }
  337. catch( Exception $e )
  338. {
  339. $this->_print_exception( $e );
  340. }
  341. }*/
  342.  
  343. public function add_to_sf( $customer, $sf_custom_data )
  344. {
  345. $account_id = $this->create_account( $customer );
  346. $contact_id = $this->create_contact( $account_id, $customer );
  347. $opportunity_id = $this->create_opportunity( $account_id, $contact_id, $customer, $sf_custom_data );
  348. $OpportunityContactRole = $this->OpportunityContactRole( $account_id, $contact_id, $opportunity_id, $customer, $sf_custom_data );
  349. $quote_id = $this->create_quotes( $opportunity_id, $account_id, $contact_id, $customer, $sf_custom_data );
  350. $quoteLine_id = $this->create_quoteLine( $opportunity_id, $account_id, $contact_id, $quote_id, $customer, $sf_custom_data );
  351.  
  352. //$lineItem_id = $this->create_lineItems( $opportunity_id, $account_id, $contact_id, $customer, $sf_custom_data );
  353. //return array( $account_id, $contact_id, $opportunity_id, $quote_id );
  354. //return array( $account_id, $contact_id, $opportunity_id );
  355.  
  356. return array( $account_id, $contact_id, $opportunity_id, $OpportunityContactRole, $quote_id, $quoteLine_id );
  357. }
  358. }
  359. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement