def confirm_purchase(invoice_id): import datetime user = g.user if invoice_id is None: i = Invoice() i.paid = False i.datecreated = datetime.datetime.utcnow() i.user_id = user.id db.session.add(i) db.session.commit() try: callback_url = url_for('pay_invoice', _external=True)+'?secret='+SECRET_KEY+'%26invoice_id='+str(i.id) url = BLOCKCHAIN_URL+'?method=create&address='+STASH_WALLET+'&callback='+callback_url xhr = urllib2.Request(url) data = json.load(urllib2.build_opener().open(xhr)) price_data = json.load(urllib2.build_opener().open(urllib2.Request("http://blockchain.info/tobtc?currency=USD&value="+str(PRICE_OF_SERVICE)))) exchange_data = json.load(urllib2.build_opener().open(urllib2.Request("http://blockchain.info/ticker"))) app.logger.info("Sent to blockchain api: " + url) except urllib2.URLError as e: app.logger.error('Unable to access the blockchain.info api: ' + url) flash('There was an error creating a new invoice. Please try again later.') return redirect('/dashboard') i.address = data['input_address'] i.total_btc = price_data i.exchange_rate_when_paid = exchange_data['USD']['last'] db.session.commit() # TODO: Generate a QR code and/or other e-z payment options for BTC services return redirect(url_for('confirm_purchase', invoice_id=i.id)) else: i = Invoice.query.get(invoice_id) if request.method == 'POST': flash('Invoice ('+i.address+') was deleted succesfully.') db.session.delete(i) db.session.commit() return redirect(url_for('dashboard')) return render_template('confirm_purchase.html', user=user, invoice=i, min_confirm=CONFIRMATION_CAP)