Exemple de code Python : soumissions d’applications, d’extensions et de versions d’évaluation
Cet article fournit des exemples de code Python qui décrivent comment utiliser l’API de soumission au Microsoft Store pour les tâches suivantes :
- Obtenir un jeton d’accès Azure AD
- Créer une extension
- Crée une version d’évaluation du package
- Créer une soumission d’applications
- Créer une soumission d’extension
- Créer une soumission de version d’évaluation du package
Obtenir un jeton d’accès Azure AD
L’exemple suivant indique comment obtenir un jeton d’accès Azure AD que vous pouvez utiliser pour appeler des méthodes dans l’API de soumission au Microsoft Store. Une fois le jeton obtenu, vous avez 60 minutes pour l’utiliser dans les appels à l’API de soumission au Microsoft Store avant expiration. Une fois le jeton arrivé à expiration, vous pouvez en générer un autre.
import http.client, json
tenantId = "" # Your tenant ID
clientId = "" # Your client ID
clientSecret = "" # Your client secret
tokenEndpoint = "https://login.microsoftonline.com/{0}/oauth2/token"
tokenResource = "https://manage.devcenter.microsoft.com"
tokenRequestBody = "grant_type=client_credentials&client_id={0}&client_secret={1}&resource={2}".format(clientId, clientSecret, tokenResource)
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"}
tokenConnection = http.client.HTTPSConnection("login.microsoftonline.com")
tokenConnection.request("POST", "/{0}/oauth2/token".format(tenantId), tokenRequestBody, headers=headers)
tokenResponse = tokenConnection.getresponse()
print(tokenResponse.status)
tokenJson = json.loads(tokenResponse.read().decode())
print(tokenJson["access_token"])
tokenConnection.close()
Créer une extension
L’exemple suivant indique comment créer et supprimer une extension.
import http.client, json
accessToken = "" # Your access token
iapRequestJson = "" # Your in-app-product request JSON
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Create a new in-app-product
ingestionConnection.request("POST", "/v1.0/my/inappproducts", iapRequestJson, headers)
createIapResponse = ingestionConnection.getresponse()
print(createIapResponse.status)
print(createIapResponse.reason)
print(createIapResponse.headers["MS-CorrelationId"]) # Log correlation ID
iapJsonObject = json.loads(createIapResponse.read().decode())
inAppProductId = iapJsonObject["id"]
# Delete created in-app-product
ingestionConnection.request("DELETE", "/v1.0/my/inappproducts/" + inAppProductId, "", headers)
deleteIapResponse = ingestionConnection.getresponse()
print(deleteIapResponse.status)
print(deleteIapResponse.headers["MS-CorrelationId"]) # Log correlation ID
ingestionConnection.close()
Crée une version d’évaluation du package
L’exemple suivant indique comment créer et supprimer une version d’évaluation du package.
import http.client, json, requests, time
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
applicationId = "" # Your application ID
flightRequestJson = "" # Your flight request JSON
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Create a new flight, a flight submission will be created together with the flight
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/flights".format(applicationId), flightRequestJson, headers)
createFlightResponse = ingestionConnection.getresponse()
print(createFlightResponse.status)
print(createFlightResponse.reason)
print(createFlightResponse.headers["MS-CorrelationId"]) # Log correlation ID
flightJsonObject = json.loads(createFlightResponse.read().decode())
flightId = flightJsonObject["flightId"]
submissionId = flightJsonObject["pendingFlightSubmission"]["id"]
# Delete created flight
ingestionConnection.request("DELETE", "/v1.0/my/applications/{0}/flights/{1}".format(applicationId, flightId), "", headers)
deleteFlightResponse = ingestionConnection.getresponse()
print(deleteFlightResponse.status)
print(deleteFlightResponse.headers["MS-CorrelationId"]) # Log correlation ID
ingestionConnection.close()
Créer une soumission d’applications
L’exemple suivant indique comment utiliser plusieurs méthodes dans l’API de soumission au Microsoft Store afin de créer une soumission d’applications. Pour ce faire, le code crée une soumission en clonant la dernière soumission publiée, puis met à jour et valide la soumission clonée dans l’Espace partenaires. Cet exemple effectue les tâches suivantes, entre autres :
- Pour commencer, il récupère les données de l’application indiquée.
- Ensuite, elle supprime la soumission en attente de l’application, s’il en existe une.
- Cela fait, il crée une soumission pour l’application (la nouvelle soumission est une copie de la dernière soumission publiée).
- Il modifie certains détails de cette soumission, puis charge un nouveau package associé à cette dernière dans le Stockage Blob Azure.
- Ensuite, il met à jour et valide la nouvelle soumission dans l’Espace partenaires.
- Pour finir, elle vérifie régulièrement l’état de la nouvelle soumission jusqu’à ce que celle-ci soit validée.
import http.client, json, requests, time
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
applicationId = "" # Your application ID
appSubmissionRequestJson = ""; # Your submission request JSON
zipFilePath = r'*.zip' # Your zip file path
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Get application
ingestionConnection.request("GET", "/v1.0/my/applications/{0}".format(applicationId), "", headers)
appResponse = ingestionConnection.getresponse()
print(appResponse.status)
print(appResponse.headers["MS-CorrelationId"]) # Log correlation ID
# Delete existing in-progress submission
appJsonObject = json.loads(appResponse.read().decode())
if "pendingApplicationSubmission" in appJsonObject :
submissionToRemove = appJsonObject["pendingApplicationSubmission"]["id"]
ingestionConnection.request("DELETE", "/v1.0/my/applications/{0}/submissions/{1}".format(applicationId, submissionToRemove), "", headers)
deleteSubmissionResponse = ingestionConnection.getresponse()
print(deleteSubmissionResponse.status)
print(deleteSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
deleteSubmissionResponse.read()
# Create submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/submissions".format(applicationId), "", headers)
createSubmissionResponse = ingestionConnection.getresponse()
print(createSubmissionResponse.status)
print(createSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
submissionJsonObject = json.loads(createSubmissionResponse.read().decode())
submissionId = submissionJsonObject["id"]
fileUploadUrl = submissionJsonObject["fileUploadUrl"]
print(submissionId)
print(fileUploadUrl)
# Update submission
ingestionConnection.request("PUT", "/v1.0/my/applications/{0}/submissions/{1}".format(applicationId, submissionId), appSubmissionRequestJson, headers)
updateSubmissionResponse = ingestionConnection.getresponse()
print(updateSubmissionResponse.status)
print(updateSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
updateSubmissionResponse.read()
# Upload images and packages in a zip file.
blob_client = BlobClient.from_blob_url(fileUploadUrl)
with open(zipFilePath, "rb") as data:
blob_client.upload_blob(data, blob_type="BlockBlob")
# Commit submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/submissions/{1}/commit".format(applicationId, submissionId), "", headers)
commitResponse = ingestionConnection.getresponse()
print(commitResponse.status)
print(commitResponse.headers["MS-CorrelationId"]) # Log correlation ID
print(commitResponse.read())
# Pull submission status until commit process is completed
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/submissions/{1}/status".format(applicationId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
while submissionJsonObject["status"] == "CommitStarted":
time.sleep(60)
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/submissions/{1}/status".format(applicationId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
print(submissionJsonObject["status"])
print(submissionJsonObject["status"])
print(submissionJsonObject)
ingestionConnection.close()
Créer une soumission d’extension
L’exemple suivant indique comment utiliser plusieurs méthodes dans l’API de soumission au Microsoft Store afin de créer une soumission d’extension. Pour ce faire, le code crée une soumission en clonant la dernière soumission publiée, puis met à jour et valide la soumission clonée dans l’Espace partenaires. Cet exemple effectue les tâches suivantes, entre autres :
- Pour commencer, il récupère les données de l’extension indiquée.
- Ensuite, il supprime la soumission en attente de l’extension, s’il en existe une.
- Après cela, elle crée une soumission pour l’extension (la nouvelle soumission est une copie de la dernière soumission publiée).
- Elle charge une archive ZIP contenant des icônes associées à la soumission dans le Stockage Blob Azure. Pour plus d’informations, consultez les instructions relatives au chargement d’une archive ZIP dans le stockage Blob Azure, qui sont fournies dans la section Créer une soumission d’extension.
- Ensuite, il met à jour et valide la nouvelle soumission dans l’Espace partenaires.
- Pour finir, elle vérifie régulièrement l’état de la nouvelle soumission jusqu’à ce que celle-ci soit validée.
import http.client, json, requests, time
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
inAppProductId = "" # Your in-app-product ID
updateSubmissionRequestBody = ""; # Your in-app-product submission request JSON
zipFilePath = r'*.zip' # Your zip file path
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Get in-app-product
ingestionConnection.request("GET", "/v1.0/my/inappproducts/{0}".format(inAppProductId), "", headers)
iapResponse = ingestionConnection.getresponse()
print(iapResponse.status)
print(iapResponse.headers["MS-CorrelationId"]) # Log correlation ID
# Delete existing in-progress submission
iapJsonObject = json.loads(iapResponse.read().decode())
if "pendingInAppProductSubmission" in iapJsonObject :
submissionToRemove = iapJsonObject["pendingInAppProductSubmission"]["id"]
ingestionConnection.request("DELETE", "/v1.0/my/inappproducts/{0}/submissions/{1}".format(inAppProductId, submissionToRemove), "", headers)
deleteSubmissionResponse = ingestionConnection.getresponse()
print(deleteSubmissionResponse.status)
print(deleteSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
deleteSubmissionResponse.read()
# Create submission
ingestionConnection.request("POST", "/v1.0/my/inappproducts/{0}/submissions".format(inAppProductId), "", headers)
createSubmissionResponse = ingestionConnection.getresponse()
print(createSubmissionResponse.status)
print(createSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
submissionJsonObject = json.loads(createSubmissionResponse.read().decode())
submissionId = submissionJsonObject["id"]
fileUploadUrl = submissionJsonObject["fileUploadUrl"]
print(submissionId)
print(fileUploadUrl)
# Update submission
ingestionConnection.request("PUT", "/v1.0/my/inappproducts/{0}/submissions/{1}".format(inAppProductId, submissionId), updateSubmissionRequestBody, headers)
updateSubmissionResponse = ingestionConnection.getresponse()
print(updateSubmissionResponse.status)
print(updateSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
updateSubmissionResponse.read()
# Upload images and packages in a zip file.
blob_client = BlobClient.from_blob_url(fileUploadUrl)
with open(zipFilePath, "rb") as data:
blob_client.upload_blob(data, blob_type="BlockBlob")
# Commit submission
ingestionConnection.request("POST", "/v1.0/my/inappproducts/{0}/submissions/{1}/commit".format(inAppProductId, submissionId), "", headers)
commitResponse = ingestionConnection.getresponse()
print(commitResponse.status)
print(commitResponse.headers["MS-CorrelationId"]) # Log correlation ID
print(commitResponse.read())
# Pull submission status until commit process is completed
ingestionConnection.request("GET", "/v1.0/my/inappproducts/{0}/submissions/{1}/status".format(inAppProductId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
while submissionJsonObject["status"] == "CommitStarted":
time.sleep(60)
ingestionConnection.request("GET", "/v1.0/my/inappproducts/{0}/submissions/{1}/status".format(inAppProductId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
print(submissionJsonObject["status"])
print(submissionJsonObject["status"])
print(submissionJsonObject)
ingestionConnection.close()
Créer une soumission de version d’évaluation du package
L’exemple suivant indique comment utiliser plusieurs méthodes dans l’API de soumission au Microsoft Store afin de créer une soumission de version d’évaluation du package. Pour ce faire, le code crée une soumission en clonant la dernière soumission publiée, puis met à jour et valide la soumission clonée dans l’Espace partenaires. Cet exemple effectue les tâches suivantes, entre autres :
- Pour commencer, il récupère les données de la version d’évaluation du package indiquée.
- Ensuite, il supprime la soumission en attente de la version d’évaluation du package, s’il en existe une.
- Cela fait, il crée une soumission pour la version d’évaluation du package (la nouvelle soumission est une copie de la dernière soumission publiée).
- Elle charge un nouveau package associé à la soumission dans le Stockage Blob Azure. Pour en savoir plus, consultez les instructions relatives au chargement d’une archive ZIP dans le Stockage Blob Azure, qui sont fournies dans la section Créer une soumission de version d’évaluation du package.
- Ensuite, il met à jour et valide la nouvelle soumission dans l’Espace partenaires.
- Pour finir, elle vérifie régulièrement l’état de la nouvelle soumission jusqu’à ce que celle-ci soit validée.
import http.client, json, requests, time, zipfile
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
applicationId = "" # Your application ID
flightId = "" # Your flight ID
flightSubmissionRequestJson = "" # Your submission request JSON
zipFilePath = r'*.zip' # Your zip file path
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Get flight
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/flights/{1}".format(applicationId, flightId), "", headers)
flightResponse = ingestionConnection.getresponse()
print(flightResponse.status)
print(flightResponse.headers["MS-CorrelationId"]) # Log correlation ID
# Delete existing in-progress submission
flightJsonObject = json.loads(flightResponse.read().decode())
if "pendingFlightSubmission" in flightJsonObject :
submissionToRemove = flightJsonObject["pendingFlightSubmission"]["id"]
ingestionConnection.request("DELETE", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}".format(applicationId, flightId, submissionToRemove), "", headers)
deleteSubmissionResponse = ingestionConnection.getresponse()
print(deleteSubmissionResponse.status)
print(deleteSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
deleteSubmissionResponse.read()
# Create submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/flights/{1}/submissions".format(applicationId, flightId), "", headers)
createSubmissionResponse = ingestionConnection.getresponse()
print(createSubmissionResponse.status)
print(createSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
submissionJsonObject = json.loads(createSubmissionResponse.read().decode())
submissionId = submissionJsonObject["id"]
fileUploadUrl = submissionJsonObject["fileUploadUrl"]
print(submissionId)
print(fileUploadUrl)
# Update submission
ingestionConnection.request("PUT", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}".format(applicationId, flightId, submissionId), flightSubmissionRequestJson, headers)
updateSubmissionResponse = ingestionConnection.getresponse()
print(updateSubmissionResponse.status)
print(updateSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
updateSubmissionResponse.read()
# Upload images and packages in a zip file.
blob_client = BlobClient.from_blob_url(fileUploadUrl)
with open(zipFilePath, "rb") as data:
blob_client.upload_blob(data, blob_type="BlockBlob")
# Commit submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/commit".format(applicationId, flightId, submissionId), "", headers)
commitResponse = ingestionConnection.getresponse()
print(commitResponse.status)
print(commitResponse.headers["MS-CorrelationId"]) # Log correlation ID
print(commitResponse.read())
# Pull submission status until commit process is completed
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/status".format(applicationId, flightId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
while submissionJsonObject["status"] == "CommitStarted":
time.sleep(60)
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/status".format(applicationId, flightId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
print(submissionJsonObject["status"])
print(submissionJsonObject["status"])
print(submissionJsonObject)
ingestionConnection.close()