def setUp(self):
        self.maxDiff = None
        self.mws_access_key = 'mws_access_key'
        self.mws_secret_key = 'mws_secret_key'
        self.merchant_id = 'merchant_id'
        self.service_version = '2013-01-01'
        self.mws_endpoint = \
            'https://mws.amazonservices.com/OffAmazonPayments_Sandbox/{}'.format(
                self.service_version)

        self.client = AmazonPayClient(
            mws_access_key=self.mws_access_key,
            mws_secret_key=self.mws_secret_key,
            merchant_id=self.merchant_id,
            handle_throttle=False,
            sandbox=True,
            region='na',
            currency_code='test')

        self.request = PaymentRequest(
            params={'test': 'test'},
            config={'mws_access_key': self.mws_access_key,
                    'mws_secret_key': self.mws_secret_key,
                    'api_version': '2013-01-01',
                    'merchant_id': self.merchant_id,
                    'mws_endpoint': self.mws_endpoint,
                    'headers': {'test': 'test'},
                    'handle_throttle': True})

        self.response = PaymentResponse('<test>test</test>')
    def setUp(self):
        self.maxDiff = None
        self.mws_access_key = 'mws_access_key'
        self.mws_secret_key = 'mws_secret_key'
        self.merchant_id = 'merchant_id'
        self.service_version = '2013-01-01'
        self.mws_endpoint = \
            'https://mws.amazonservices.com/OffAmazonPayments_Sandbox/{}'.format(
                self.service_version)

        self.client = AmazonPayClient(
            mws_access_key=self.mws_access_key,
            mws_secret_key=self.mws_secret_key,
            merchant_id=self.merchant_id,
            handle_throttle=False,
            sandbox=True,
            region='na',
            currency_code='USD'
            )

        self.request = PaymentRequest(
            params={'test': 'test'},
            config={'mws_access_key': self.mws_access_key,
                    'mws_secret_key': self.mws_secret_key,
                    'api_version': '2013-01-01',
                    'merchant_id': self.merchant_id,
                    'mws_endpoint': self.mws_endpoint,
                    'headers': {'test': 'test'},
                    'handle_throttle': True})

        self.response = PaymentResponse('<test>الفلانية فلا</test>')
        self.supplementary_data = '{"AirlineMetaData" : {"version": 1.0, "airlineCode": "PAX", "flightDate": "2018-03-24T20:29:19.22Z", "departureAirport": "CDG", "destinationAirport": "LUX", "bookedLastTime": -1, "classOfTravel": "F", "passengers": {"numberOfPassengers": 4, "numberOfChildren": 1, "numberOfInfants": 1 }}, "AccommodationMetaData": {"version": 1.0, "startDate": "2018-03-24T20:29:19.22Z", "endDate": "2018-03-24T20:29:19.22Z", "lengthOfStay": 5, "numberOfGuests": 4, "class": "Standard", "starRating": 5, "bookedLastTime": -1 }, "OrderMetaData": {"version": 1.0, "numberOfItems": 3, "type": "Digital" }, "BuyerMetaData": {"version" : 1.0, "isFirstTimeCustomer" : true, "numberOfPastPurchases" : 2, "numberOfDisputedPurchases" : 3, "hasOpenDispute" : true, "riskScore" : 0.75 }}'
示例#3
0
def authorize():
    from amazon_pay.client import AmazonPayClient

    client = AmazonPayClient(
        mws_access_key=session['mws_access_key'],
        mws_secret_key=session['mws_secret_key'],
        merchant_id=session['merchant_id'],
        sandbox=True,
        region='na',
        currency_code='USD',
        log_enabled=True,
        log_file_name="log.txt",
        log_level="DEBUG")

    response = client.authorize_on_billing_agreement(
        amazon_billing_agreement_id=session['billing_agreement_id'],
        authorization_reference_id=rand(),
        authorization_amount='1.99',
        seller_authorization_note='Python SDK payment authorization.',
        transaction_timeout=0,
        capture_now=True)

    response = client.get_billing_agreement_details(
        amazon_billing_agreement_id=session['billing_agreement_id'],
        address_consent_token=session['access_token'])

    pretty = json.dumps(
        json.loads(
            response.to_json()),
        indent=4)
    return pretty
示例#4
0
def get_details():
    from amazon_pay.client import AmazonPayClient

    client = AmazonPayClient(
        mws_access_key=session['mws_access_key'],
        mws_secret_key=session['mws_secret_key'],
        merchant_id=session['merchant_id'],
        sandbox=True,
        region='na',
        currency_code='USD',
        log_enabled=True,
        log_file_name="log.txt",
        log_level="DEBUG")

    billing_agreement_id = request.form['billingAgreementId']
    session['billing_agreement_id'] = billing_agreement_id

    response = client.set_billing_agreement_details(
        amazon_billing_agreement_id=billing_agreement_id,
        store_name='Amazon Pay Python SDK')

    if response.success:
        response = client.get_billing_agreement_details(
            amazon_billing_agreement_id=billing_agreement_id,
            address_consent_token=session['access_token'])

    pretty = json.dumps(
        json.loads(
            response.to_json()),
        indent=4)

    return pretty
示例#5
0
def get_details():
    if request.method == 'POST':
        from amazon_pay.client import AmazonPayClient

        client = AmazonPayClient(
            mws_access_key=request.session['mws_access_key'],
            mws_secret_key=request.session['mws_secret_key'],
            merchant_id=request.session['merchant_id'],
            sandbox=True,
            region='na',
            currency_code='USD',
            log_enabled=True,
            log_file_name="log.txt",
            log_level="DEBUG")

        order_reference_id = request.POST.get('orderReferenceId')
        request.session['order_reference_id'] = order_reference_id

        print(request.session['order_reference_id'])

        response = client.set_order_reference_details(
            amazon_order_reference_id=order_reference_id, order_total='19.95')

        if response.success:
            response = client.get_order_reference_details(
                amazon_order_reference_id=order_reference_id,
                address_consent_token=request.session['access_token'])

        pretty = json.dumps(json.loads(response.to_json()), indent=4)

        return pretty
示例#6
0
def SetOrderAttributes(**kwargs):
    print("Inside SetOrderAttributes()")
    print(kwargs)

    client = AmazonPayClient(mws_access_key=kwargs["MWS_ACCESS_KEY"],
                             mws_secret_key=kwargs["MWS_SECRET_KEY"],
                             merchant_id=kwargs["MERCHANT_ID"],
                             region=kwargs["REGION"],
                             currency_code=kwargs["CURRENCY_CODE"],
                             sandbox=True)
    print(client)

    timestamp_ = time.time()
    ret = client.set_order_attributes(
        amazon_order_reference_id=kwargs["ORDER_REF_ID"],
        amount=kwargs["ORDER_TOTAL"],
        currency_code=kwargs["CURRENCY_CODE"],
        seller_note='Thank you for donating {} {} to the charity of the day!'.
        format(kwargs["ORDER_TOTAL"], kwargs["CURRENCY_CODE"]),
        seller_order_id='#-donatio-{}-{}'.format(timestamp_,
                                                 kwargs["ORDER_TOTAL"]),
        store_name='Donatio: Gamify your Charity',
        custom_information='-')
    print("Set Order Attributes")
    print(ret.to_json())

    response = client.confirm_order_reference(
        amazon_order_reference_id=kwargs["ORDER_REF_ID"],
        success_url=
        "https://donatio-site.herokuapp.com/paymentStatus?success=true",
        failure_url=
        "https://donatio-site.herokuapp.com/paymentStatus?success=false")

    print("Confirm Order Reference")
    print(response.to_json())
示例#7
0
def review():
    client = AmazonPayClient(
        mws_access_key=session['mws_access_key'],
        mws_secret_key=session['mws_secret_key'],
        merchant_id=session['merchant_id'],
        sandbox=True,
        region=REGION_CODE,
        currency_code=CURRENCY_CODE,
        log_enabled=True,
        log_file_name="/tmp/amzpay.log",
        log_level="DEBUG")

    order_reference_id = request.form['orderReferenceId']
    session['order_reference_id'] = order_reference_id

    print('get details for orderId', session['order_reference_id'])

    response = client.set_order_reference_details(
        amazon_order_reference_id=order_reference_id,
        order_total=session['order_amount'],
        seller_note='My seller note.',
        seller_order_id=secrets.token_hex(16),
        store_name='My store name.',
        custom_information='My custom information.')

    if response.success:
        response = client.get_order_reference_details(
            amazon_order_reference_id=order_reference_id,
            address_consent_token=session['amazon_Login_accessToken'])

    order_detail = json.dumps(json.loads(response.to_json()), indent=4)
    return render_template('review.html', order_detail=order_detail)
示例#8
0
def confirm():
    pretty_confirm = None
    pretty_authorize = None

    client = AmazonPayClient(
        mws_access_key=session['mws_access_key'],
        mws_secret_key=session['mws_secret_key'],
        merchant_id=session['merchant_id'],
        sandbox=True,
        region=REGION_CODE,
        currency_code=CURRENCY_CODE,
        log_enabled=True,
        log_file_name="/tmp/amzpay.log",
        log_level="DEBUG")

    print('session', session)
    response = client.confirm_order_reference(
        amazon_order_reference_id=session['order_reference_id'])

    pretty_confirm = json.dumps(json.loads(response.to_json()), indent=4)

    if response.success:
        response = client.authorize(
            amazon_order_reference_id=session['order_reference_id'],
            authorization_reference_id=rand(),
            authorization_amount=session['order_amount'],
            transaction_timeout=0,
            capture_now=bool(random.randint(0, 1)))

    pretty_authorize = json.dumps(json.loads(response.to_json()), indent=4)

    return render_template(
        'confirm.html', confirm=pretty_confirm, authorize=pretty_authorize)
    def test_environment_variables(self):
        os.environ['AP_REGION'] = 'na'
        os.environ['AP_MWS_ACCESS_KEY'] = 'AP_MWS_ACCESS_KEY'
        os.environ['AP_MERCHANT_ID'] = 'AP_MERCHANT_ID'
        os.environ['AP_CURRENCY_CODE'] = 'AP_CURRENCY_CODE'
        os.environ['AP_MWS_SECRET_KEY'] = 'AP_MWS_SECRET_KEY'

        client = AmazonPayClient(sandbox=True)
        self.assertEqual(client.region, 'na')
        self.assertEqual(client.mws_access_key, 'AP_MWS_ACCESS_KEY')
        self.assertEqual(client.mws_secret_key, 'AP_MWS_SECRET_KEY')
        self.assertEqual(client.merchant_id, 'AP_MERCHANT_ID')
        self.assertEqual(client.currency_code, 'AP_CURRENCY_CODE')

        os.environ['AP_REGION'] = 'AP_REGION'
        with self.assertRaises(KeyError):
            client = AmazonPayClient()
示例#10
0
 def test_region_exception(self):
     with self.assertRaises(KeyError):
         AmazonPayClient(mws_access_key=self.mws_access_key,
                         mws_secret_key=self.mws_secret_key,
                         merchant_id=self.merchant_id,
                         handle_throttle=False,
                         sandbox=True,
                         region='should_throw_exception',
                         currency_code='test')
示例#11
0
 def api(self):
     return AmazonPayClient(
         mws_access_key=self.mws_access_key,
         mws_secret_key=self.mws_secret_key,
         merchant_id=self.merchant_id,
         region=self.region,
         currency_code=self.currency_code,
         handle_throttle=self.handle_throttle,
         sandbox=self.sandbox)
示例#12
0
 def test_application_settings(self):
     client = AmazonPayClient(
         mws_access_key=self.mws_access_key,
         mws_secret_key=self.mws_secret_key,
         merchant_id=self.merchant_id,
         handle_throttle=False,
         sandbox=True,
         region='na',
         currency_code='test',
         application_name='test_application',
         application_version='test_application_version')
     self.assertEqual(client.application_name, 'test_application')
     self.assertEqual(client.application_version,
                      'test_application_version')
示例#13
0
def AmazonConfirmationBackend():
    pretty_confirm = None
    pretty_authorize = None

    client = AmazonPayClient(
        mws_access_key=settings.MWS_ACCESS,
        mws_secret_key=settings.MWS_SECRET,
        merchant_id=settings.MERCHANT_ID,
        sandboz=True,
        region='na',
        currency_code='USD',
        log_enabled=True,
        log_file_name='log.txt',
        log_level='DEBUG'
    )

    print(client)
def confirm():
    from amazon_pay.client import AmazonPayClient

    pretty_confirm = None
    pretty_authorize = None

    client = AmazonPayClient(
        mws_access_key=session['mws_access_key'],
        mws_secret_key=session['mws_secret_key'],
        merchant_id=session['merchant_id'],
        sandbox=True,
        region='na',
        currency_code='USD',
        log_enabled=True,
        log_file_name="log.txt",
        log_level="DEBUG")
         
    print(session)
    response = client.confirm_order_reference(
        amazon_order_reference_id=session['order_reference_id'])

    pretty_confirm = json.dumps(
        json.loads(
            response.to_json()),
        indent=4)

    if response.success:
        response = client.authorize(
            amazon_order_reference_id=session['order_reference_id'],
            authorization_reference_id=rand(),
            authorization_amount='19.95',
            transaction_timeout=0,
            capture_now=False)

    pretty_authorize = json.dumps(
        json.loads(
            response.to_json()),
        indent=4)

    return render_template(
        'confirm.html', confirm=pretty_confirm, authorize=pretty_authorize)
示例#15
0
def confirm():
    from amazon_pay.client import AmazonPayClient

    client = AmazonPayClient(
        mws_access_key=session['mws_access_key'],
        mws_secret_key=session['mws_secret_key'],
        merchant_id=session['merchant_id'],
        sandbox=True,
        region='na',
        currency_code='USD',
        log_enabled=True,
        log_file_name="log.txt",
        log_level="DEBUG")

    response = client.confirm_billing_agreement(
        amazon_billing_agreement_id=session['billing_agreement_id'])

    pretty = json.dumps(
        json.loads(
            response.to_json()),
        indent=4)
    return render_template('confirm.html', confirm_response=pretty)
示例#16
0
def authorization_notification(payload):

    amzn_id = payload["AuthorizationNotification"]["AuthorizationDetails"][
        "AmazonAuthorizationId"]

    # trim everything after the last dash - seems like there should be a more
    # straightforward way to do this
    match = re.search("^(.*)[-]", amzn_id)
    amzn_id = match.group(1)
    logging.info(amzn_id)

    client = AmazonPayClient(
        mws_access_key=MWS_ACCESS_KEY,
        mws_secret_key=MWS_SECRET_KEY,
        merchant_id=AMAZON_MERCHANT_ID,
        region="na",
        currency_code="USD",
        sandbox=AMAZON_SANDBOX,
    )
    response = client.get_order_reference_details(
        amazon_order_reference_id=amzn_id)
    response = response.to_dict()

    logging.info(json.dumps(response, indent=4))

    details = response["GetOrderReferenceDetailsResponse"][
        "GetOrderReferenceDetailsResult"]["OrderReferenceDetails"]

    amount = details["OrderTotal"]["Amount"]
    logging.info(amount)
    name = HumanName(details["Buyer"]["Name"])
    first_name = name.first
    last_name = name.last
    email = details["Buyer"]["Email"]
    zipcode = get_zip(details=details)
    description = details["SellerOrderAttributes"]["StoreName"]

    logging.info("----Getting contact....")
    contact = Contact.get_or_create(email=email,
                                    first_name=first_name,
                                    last_name=last_name,
                                    zipcode=zipcode)
    logging.info(contact)

    if contact.first_name == "Subscriber" and contact.last_name == "Subscriber":
        logging.info(f"Changing name of contact to {first_name} {last_name}")
        contact.first_name = first_name
        contact.last_name = last_name
        contact.save()

    if contact.first_name != first_name or contact.last_name != last_name:
        logging.info(
            f"Contact name doesn't match: {contact.first_name} {contact.last_name}"
        )

    if zipcode and not contact.created and contact.mailing_postal_code != zipcode:
        contact.mailing_postal_code = zipcode
        contact.save()

    logging.info("----Adding opportunity...")

    opportunity = Opportunity(contact=contact, stage_name="Closed Won")
    opportunity.amount = amount
    opportunity.description = description
    opportunity.lead_source = "Amazon Alexa"
    opportunity.amazon_order_id = amzn_id
    opportunity.campaign_id = AMAZON_CAMPAIGN_ID
    opportunity.name = (
        f"[Alexa] {contact.first_name} {contact.last_name} ({contact.email})")
    opportunity.save()
    logging.info(opportunity)
    notify_slack(contact=contact, opportunity=opportunity)
    if contact.duplicate_found:
        send_multiple_account_warning(contact)