def get_product_jwt(product, contribution): """Prepare a JWT for paid products to pass into navigator.pay()""" issued_at = calendar.timegm(time.gmtime()) token_data = { 'iss': settings.APP_PURCHASE_KEY, 'typ': settings.APP_PURCHASE_TYP, 'aud': settings.APP_PURCHASE_AUD, 'iat': issued_at, 'exp': issued_at + 3600, # expires in 1 hour 'request': { 'id': product.external_id(), 'name': unicode(product.name()), 'icons': product.icons(), 'description': strip_tags(product.description()), 'pricePoint': product.price().name, 'productData': urlencode(product.product_data(contribution)), 'chargebackURL': absolutify(reverse('webpay.chargeback')), 'postbackURL': absolutify(reverse('webpay.postback')), } } token = sign_webpay_jwt(token_data) log.debug('Preparing webpay JWT for self.product {0}: {1}'.format( product.id(), token)) return { 'webpayJWT': token, 'contribStatusURL': reverse( 'webpay-status', kwargs={'uuid': contribution.uuid} ) }
def get_product_jwt(product, user=None, region=None, source=None, lang=None, client_data=None): """Prepare a JWT for paid products to pass into navigator.pay()""" # TODO: Contribution should be created outside of the JWT producer contribution = Contribution.objects.create( addon_id=product.addon().pk, amount=product.amount(region), client_data=client_data, paykey=None, price_tier=product.price(), source=source, source_locale=lang, type=amo.CONTRIB_PENDING, user=user, uuid=str(uuid.uuid4()), ) log.debug('Storing contrib for uuid: {0}'.format(contribution.uuid)) user_id = user.pk if user else None log.debug('Starting purchase of app: {0} by user: {1}'.format( product.id(), user_id)) issued_at = calendar.timegm(time.gmtime()) token_data = { 'iss': settings.APP_PURCHASE_KEY, 'typ': settings.APP_PURCHASE_TYP, 'aud': settings.APP_PURCHASE_AUD, 'iat': issued_at, 'exp': issued_at + 3600, # expires in 1 hour 'request': { 'id': product.external_id(), 'name': unicode(product.name()), 'icons': product.icons(), 'description': strip_tags(product.description()), 'pricePoint': product.price().name, 'productData': urlencode(product.product_data(contribution)), 'chargebackURL': absolutify(reverse('webpay.chargeback')), 'postbackURL': absolutify(reverse('webpay.postback')), } } token = sign_webpay_jwt(token_data) log.debug('Preparing webpay JWT for self.product {0}: {1}'.format( product.id(), token)) return { 'webpayJWT': token, 'contribStatusURL': reverse('webpay-status', kwargs={'uuid': contribution.uuid}) }
def get_product_jwt(product, user=None, region=None, source=None, lang=None, client_data=None): """Prepare a JWT for paid products to pass into navigator.pay()""" # TODO: Contribution should be created outside of the JWT producer contribution = Contribution.objects.create( addon_id=product.addon().pk, amount=product.amount(region), client_data=client_data, paykey=None, price_tier=product.price(), source=source, source_locale=lang, type=amo.CONTRIB_PENDING, user=user, uuid=str(uuid.uuid4()), ) log.debug('Storing contrib for uuid: {0}'.format(contribution.uuid)) user_id = user.pk if user else None log.debug('Starting purchase of app: {0} by user: {1}'.format( product.id(), user_id)) issued_at = calendar.timegm(time.gmtime()) token_data = { 'iss': settings.APP_PURCHASE_KEY, 'typ': settings.APP_PURCHASE_TYP, 'aud': settings.APP_PURCHASE_AUD, 'iat': issued_at, 'exp': issued_at + 3600, # expires in 1 hour 'request': { 'id': product.external_id(), 'name': unicode(product.name()), 'icons': product.icons(), 'description': strip_tags(product.description()), 'pricePoint': product.price().name, 'productData': urlencode(product.product_data(contribution)), 'chargebackURL': absolutify(reverse('webpay.chargeback')), 'postbackURL': absolutify(reverse('webpay.postback')), } } token = sign_webpay_jwt(token_data) log.debug('Preparing webpay JWT for self.product {0}: {1}'.format( product.id(), token)) return { 'webpayJWT': token, 'contribStatusURL': reverse( 'webpay-status', kwargs={ 'uuid': contribution.uuid } ) }
def get_product_jwt(product, contribution): """ Prepare a JWT describing the item about to be purchased when working with navigator.mozPay(). See the MDN docs for details on the JWT fields: https://developer.mozilla.org/en-US/Marketplace/Monetization /In-app_payments_section/mozPay_iap """ issued_at = calendar.timegm(time.gmtime()) product_data = product.product_data(contribution) simulation = product.simulation() if not simulation and not product_data.get('public_id'): raise ValueError( 'Cannot create JWT without a cached public_id for ' 'app {a}'.format(a=product.addon())) token_data = { 'iss': settings.APP_PURCHASE_KEY, 'typ': settings.APP_PURCHASE_TYP, 'aud': settings.APP_PURCHASE_AUD, 'iat': issued_at, 'exp': issued_at + 3600, # expires in 1 hour 'request': { 'id': product.external_id(), 'name': unicode(product.name()), 'defaultLocale': product.default_locale(), 'locales': product.localized_properties(), 'icons': product.icons(), 'description': strip_tags(product.description()), 'pricePoint': product.price().name, 'productData': urlencode(product_data), 'chargebackURL': absolutify(reverse('webpay.chargeback')), 'postbackURL': absolutify(reverse('webpay.postback')), } } if simulation: token_data['request']['simulate'] = simulation token = sign_webpay_jwt(token_data) log.debug('Preparing webpay JWT for product {p}, contrib {c}: {t}' .format(p=product.id(), t=token_data, c=contribution)) return { 'webpayJWT': token, 'contribStatusURL': reverse( 'webpay-status', kwargs={'uuid': contribution.uuid} ) }
def get_product_jwt(product, contribution): """Prepare a JWT for paid products to pass into navigator.pay()""" issued_at = calendar.timegm(time.gmtime()) product_data = product.product_data(contribution) simulation = product.simulation() if not simulation and not product_data.get('public_id'): raise ValueError( 'Cannot create JWT without a cached public_id for ' 'app {a}'.format(a=product.addon())) token_data = { 'iss': settings.APP_PURCHASE_KEY, 'typ': settings.APP_PURCHASE_TYP, 'aud': settings.APP_PURCHASE_AUD, 'iat': issued_at, 'exp': issued_at + 3600, # expires in 1 hour 'request': { 'id': product.external_id(), 'name': unicode(product.name()), 'icons': product.icons(), 'description': strip_tags(product.description()), 'pricePoint': product.price().name, 'productData': urlencode(product_data), 'chargebackURL': absolutify(reverse('webpay.chargeback')), 'postbackURL': absolutify(reverse('webpay.postback')), } } if simulation: token_data['request']['simulate'] = simulation token = sign_webpay_jwt(token_data) log.debug('Preparing webpay JWT for product {p}, contrib {c}: {t}' .format(p=product.id(), t=token_data, c=contribution)) return { 'webpayJWT': token, 'contribStatusURL': reverse( 'webpay-status', kwargs={'uuid': contribution.uuid} ) }