2017-11-25 1 views
0

Probieren Sie den Beispielcode this aus, um Stripe-Checkout und Gebühren in Google Apps Script zu erstellen.Zahlung per Stripe mit Google Apps Script

Html.HTML Datei

<!DOCTYPE html> 
 
<!-- modification of https://stripe.com/docs/checkout#integration-custom --> 
 
<button id="customButton">Purchase</button> 
 

 
<script src="https://checkout.stripe.com/checkout.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<script> 
 
var handler = StripeCheckout.configure(
 
{ 
 
    key: 'pk_test_UUbDY16wDCECOujIs0vQ2vTi', 
 
    image: 'https://i.imgur.com/M0ku9HH.png', 
 
    token: function(token) 
 
    { 
 
    // Use the token to create the charge with a server-side script. 
 
    // You can access the token ID with `token.id` 
 
    google.script.run.withSuccessHandler(chargeSuccess) 
 
    google.script.run.withFailureHandler(chargeFailure) 
 
    google.script.run.processCharge(token); 
 
    } 
 
} 
 
); 
 

 
$('#customButton').on('click', function(e) 
 
{ 
 
    // Open Checkout with further options 
 
    handler.open(
 
    { 
 
    name: 'ASD Anastasiya Ballet S.', 
 
    description: 'Pagamento online' 
 
    }); 
 
    e.preventDefault(); 
 
}); 
 
function chargeSuccess(result) { 
 
    // handle response code client side 
 
} 
 
function chargeFailure(error) { 
 
    // client error handling 
 
} 
 
</script>

Hier werden die GS.gs Datei

// IFRAME mode required 
function doGet() { 
return HtmlService.createHtmlOutputFromFile('HTML') 
.setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 

/** 
* Read Stripe token passed from google.script.run instead of 
* using a form POST request - which can't happen in HtmlService. 
* 
* @param {Object} token from checkout.js 
* @return {number} HTTP Response code 
*/ 
function processCharge(token) { 


var tokenId = token.id; 
var stripeEmail = token.email; 

// Create a Customer (optional) 
/* 
var path = "/customers"; 
var customer = Stripe_PostRequest(path, [], [], { 
    "description": "test customer", 
    "source": tokenId, 
    "email": stripeEmail 
}); 

var custId = JSON.parse(customer.getContentText()).id; 
*/ 

// Create a Charge 
path = "/charges"; 
var charge = Stripe_PostRequest(path, [], [], { 
    "currency": "usd", 
    "amount": "500", 
    //"customer": custId 
}); 

return charge.getResponseCode(); 
} 

/** 
* Generic function for making a POST request to the Stripe API. 
* Provided by Stripe support 
* 
* @param {string} path 
* @param {Object} parameters 
* @return {HTTPResponse} 
*/ 
var Stripe_PostRequest = function(path, fields, expandableFields, parameters) { 
    // Expand related fields when accessing sub-properties 
    // (e.g. `customer.email` should expand the customer 
    // object when retrieving a charge). 
    if (expandableFields !== undefined) { 
    parameters["expand[]"] = []; 
    fields.forEach(function(field) { 
     field = field.split(".")[0]; 
     if (expandableFields.indexOf(field) !== -1) { 
     parameters["expand[]"].push("data." + field); 
     } 
    }); 
    } 

    var scriptProperties = PropertiesService.getScriptProperties(); 
    var secret = scriptProperties.getProperty('testSecret'); 

    var options = { 
    "method" : "post", 
    "headers": { 
     "Authorization": "Bearer " + secret, 
     "User-Agent": "Stripe Example/0.1" 
    } 
    }; 
    var url = "https://api.stripe.com/v1" + path + serializeQueryString(parameters); 
    return UrlFetchApp.fetch(url, options); 
} 

/** 
* Serialize a dictionary to a query string for GET requests 
*/ 
var serializeQueryString = function(parameters) { 
    var str = []; 
    for (var key in parameters) { 
    var value = parameters[key]; 
    if (parameters.hasOwnProperty(key) && value) { 
     if (value.map) { 
     str.push(value.map(function(array_value) { 
      return key + "=" + encodeURIComponent(array_value); 
     }).join("&")); 
     } else { 
     str.push(key + "=" + encodeURIComponent(value)); 
     } 
    } 
    } 
    return '?' + str.join("&"); 
} 

Die Form der Arbeit in Ordnung, aber keine Ladung erzeugt, da kein Token erstellt wurde, scheint. Sein haupt nicht ein JS-Experte Ich bin nicht sicher, ob die Funktion

Token: function (Token)

die

google.script.run.processCharge (Token) nennt;

wird korrekt ausgeführt.

+0

Zunächst einmal Ihre Funktionsaufruf in Arbeitsbeispiel nicht wie folgt aussieht: google.script.run.withSuccessHandler (chargeSuccess) .withFailureHandler (chargeFailure) .processCharge (Token); – Kos

+0

Ja, ich habe es geändert angenommen, war nicht klar. Dies ist nicht das Problem, anscheinend kann ich den richtigen Schlüssel nicht senden. Nicht sicher, ob die Google Script POST-Erstellungsfunktion ordnungsgemäß funktioniert. Mit Google Script können Sie den Standardaufruf stripe.charges.create erstellen. – davide445

Antwort

0

Ihr Code schlägt fehl, da Sie den custId auskommentiert haben - dies muss zur Verfügung gestellt werden. Es ist nicht schaden, dies zu verlassen, es wird einfach einen Testkunden erstellen. Andernfalls erstellen Sie einen Kunden im Steuerfeld "Stripe" und kopieren Sie die ID in "custId".

Sie können immer in "Ansicht> Ausführungstranskript" nach Hinweisen suchen, warum das Skript fehlschlägt.