Exemplo n.º 1
0
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)