You appear to be a bot. Output may be restricted
Description
Process the purchase and create the charge in Amazon
Usage
$void = EDD_Amazon_Payments::process_purchase( $purchase_data );
Parameters
- $purchase_data
- ( mixed ) required –
Returns
void
Source
File name: easy-digital-downloads/includes/gateways/amazon-payments.php
Lines:
1 to 93 of 93
public function process_purchase( $purchase_data ) { if( empty( $purchase_data['post_data']['edd_amazon_reference_id'] ) ) { edd_set_error( 'missing_reference_id', __( 'Missing Reference ID, please try again', 'easy-digital-downloads' ) ); } $errors = edd_get_errors(); if ( $errors ) { edd_send_back_to_checkout( '?payment-mode=amazon' ); } $args = apply_filters( 'edd_amazon_charge_args', array( 'merchant_id' => edd_get_option( 'amazon_seller_id', '' ), 'amazon_reference_id' => $purchase_data['post_data']['edd_amazon_reference_id'], 'authorization_reference_id' => $purchase_data['purchase_key'], 'charge_amount' => $purchase_data['price'], 'currency_code' => edd_get_currency(), 'charge_note' => html_entity_decode( edd_get_purchase_summary( $purchase_data, false ) ), 'charge_order_id' => $purchase_data['purchase_key'], 'store_name' => remove_accents( wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) ), 'transaction_timeout' => 0 ), $purchase_data ); $args['platform_id'] = 'A3JST9YM1SX7LB'; $charge = $this->client->charge( $args ); if( 200 == $charge->response['Status'] ) { $charge = new ResponseParser( $charge->response ); $charge = $charge->toArray(); $status = $charge['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['State']; if( 'Declined' === $status ) { $reason = $charge['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['ReasonCode']; edd_set_error( 'payment_declined', sprintf( __( 'Your payment could not be authorized, please try a different payment method. Reason: %s', 'easy-digital-downloads' ), $reason ) ); edd_send_back_to_checkout( '?payment-mode=amazon&amazon_reference_id=' . $purchase_data['post_data']['edd_amazon_reference_id'] ); } // Setup payment data to be recorded $payment_data = array( 'price' => $purchase_data['price'], 'date' => $purchase_data['date'], 'user_email' => $purchase_data['user_email'], 'purchase_key' => $purchase_data['purchase_key'], 'currency' => edd_get_currency(), 'downloads' => $purchase_data['downloads'], 'user_info' => $purchase_data['user_info'], 'cart_details' => $purchase_data['cart_details'], 'gateway' => $this->gateway_id, 'status' => 'pending', ); $payment_id = edd_insert_payment( $payment_data ); $authorization_id = $charge['AuthorizeResult']['AuthorizationDetails']['AmazonAuthorizationId']; $capture_id = str_replace( '-A', '-C', $authorization_id ); $reference_id = sanitize_text_field( $_POST['edd_amazon_reference_id'] ); // Confirm the capture was completed $capture = $this->client->getCaptureDetails( array( 'merchant_id' => edd_get_option( 'amazon_seller_id', '' ), 'amazon_capture_id' => $capture_id ) ); $capture = new ResponseParser( $capture->response ); $capture = $capture->toArray(); edd_update_payment_meta( $payment_id, '_edd_amazon_authorization_id', $authorization_id ); edd_update_payment_meta( $payment_id, '_edd_amazon_capture_id', $capture_id ); edd_set_payment_transaction_id( $payment_id, $reference_id ); edd_update_payment_status( $payment_id, 'publish' ); // Empty the shopping cart edd_empty_cart(); edd_send_to_success_page(); } else { // Set an error edd_set_error( 'amazon_error',sprintf( __( 'There was an issue processing your payment. Amazon error: %s', 'easy-digital-downloads' ), print_r( $charge, true ) ) ); edd_send_back_to_checkout( '?payment-mode=amazon&amazon_reference_id=' . $purchase_data['post_data']['edd_amazon_reference_id'] ); } }