$value ) { $this->{$key} = $value; } $this->wp_error = new \WP_Error(); } /** * Builds a new MerchantAccount object from a JSON object. * * @since 2.11 * * @param string $json * * @return MerchantAccount */ public static function from_json( $json ) { $merchant_details = json_decode( $json, true ); if ( empty( $merchant_details ) || ! is_array( $merchant_details ) ) { $merchant_details = array(); } return new MerchantAccount( $merchant_details ); } /** * Converts the account details to JSON. * * @since 2.11 * * @return string|false */ public function to_json() { return json_encode( get_object_vars( $this ) ); } /** * Determines whether or not the details are valid. * Note: This does NOT determine actual "ready to accept payments" status, it just * verifies that we have all the information we need to determine that. * * @throws MissingMerchantDetails * @throws InvalidMerchantDetails */ public function validate() { if ( empty( $this->merchant_id ) ) { throw new MissingMerchantDetails(); } $required_properties = array( 'merchant_id', 'payments_receivable', 'primary_email_confirmed', 'products', ); $valid_properties = array(); foreach( $required_properties as $property ) { if ( property_exists( $this, $property ) && ! is_null( $this->{$property} ) ) { $valid_properties[] = $property; } } $difference = array_diff( $required_properties, $valid_properties ); if ( $difference ) { throw new InvalidMerchantDetails( 'Please click "Re-Check Payment Status" below to confirm your payment status.' ); } } /** * Determines whether or not the account is ready to accept payments. * * @since 2.11 * * @return bool */ public function is_account_ready() { if ( ! $this->payments_receivable ) { $this->wp_error->add( 'payments_receivable', __( 'Your account is unable to receive payments. Please contact PayPal customer support.', 'easy-digital-downloads' ) ); } if ( ! $this->primary_email_confirmed ) { $this->wp_error->add( 'primary_email_confirmed', __( 'Your PayPal email address needs to be confirmed.', 'easy-digital-downloads' ) ); } return empty( $this->wp_error->errors ); } /** * Retrieves errors preventing the account from being "ready". * * @see MerchantAccount::is_account_ready() * * @since 2.11 * * @return \WP_Error */ public function get_errors() { return $this->wp_error; } /** * Returns the option name for the current mode. * * @since 2.11 * * @return string */ private static function get_option_name() { return sprintf( 'edd_paypal_%s_merchant_details', edd_is_test_mode() ? API::MODE_SANDBOX : API::MODE_LIVE ); } /** * Saves the merchant details. * * @since 2.11 */ public function save() { update_option( self::get_option_name(), $this->to_json() ); } /** * Retrieves the saved merchant details. * * @since 2.11 * * @return MerchantAccount * @throws \InvalidArgumentException */ public static function retrieve() { return self::from_json( get_option( self::get_option_name(), '' ) ); } }