import asyncio
import aiohttp
import requests
from requests.auth import HTTPBasicAuth
import base64
import requests
import datetime
live_url="https://api.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials"
app_key="up863hWneHvgTzQHTAKTRUPFmJOmx9GB"
app_secret="3HYLLjkSnTRBn2N5"
r = requests.get(live_url,auth=HTTPBasicAuth(app_key, app_secret))
token=r.json()['access_token']

business_shortcode="7302281"
passcode="5359d4ee9b66f9acb2df4c31370d675de045d53c457f498b87af930df478d98c"
amount="1"

live_url="https://api.safaricom.co.ke/mpesa/stkpush/v1/processrequest"
callback_url="https://comcast.co.ke/pay/callback_url.php"
reference_code="ComcastLtd"
phone_number="254708562799"
description="Public hotspot service"


time = str(datetime.datetime.now()).split(".")[0].replace("-", "").replace(" ", "").replace(":", "")
password = "{0}{1}{2}".format(str(business_shortcode), str(passcode), time)
encoded = base64.b64encode(bytes(password, encoding='utf8'))
payload = {
    "BusinessShortCode": business_shortcode,
    "Password": encoded.decode("utf-8"),
    "Timestamp": time,
    "TransactionType": "CustomerBuyGoodsOnline",
    "Amount": amount,
    "PartyA": int(phone_number),
    "PartyB": "5299403",
    "PhoneNumber": int(phone_number),
    "CallBackURL": callback_url,
    "AccountReference": reference_code,
    "TransactionDesc": description
}
headers = {'Authorization': 'Bearer {0}'.format(token), 'Content-Type': "application/json"}

url = "{0}{1}".format(live_url, "/mpesa/stkpush/v1/processrequest")
response_url = requests.post(live_url, headers=headers, json=payload)
#print(response_url.json())
time = str(datetime.datetime.now()).split(".")[0].replace("-", "").replace(" ", "").replace(":", "")
password = "{0}{1}{2}".format(str(business_shortcode), str(passcode), time)
encoded = base64.b64encode(bytes(password, encoding='utf8'))
payload = {
    "BusinessShortCode": business_shortcode,
    "Password": encoded.decode("utf-8"),
    "Timestamp": time,
    "CheckoutRequestID": ''
}
headers = {'Authorization': 'Bearer {0}'.format(token), 'Content-Type': "application/json"}

saf_url = "{0}{1}".format(live_url, "/mpesa/stkpushquery/v1/query")
data_response = requests.post(saf_url, headers=headers, json=payload)
response =response_url.json()
if response['ResponseDescription']=="Success. Request accepted for processing":
        print("true")

