Android 作为API的云功能
我想使用HTTP云函数作为API。我使用Reformation作为REST客户端并发送POST请求(我使用HTTP云函数URL作为API端点)。函数读取作为POST参数发送的参数并对其进行处理,我想将函数中的某些内容作为响应传递回客户端。我该如何做? 以下是我的云函数代码:Android 作为API的云功能,android,retrofit2,google-cloud-functions,Android,Retrofit2,Google Cloud Functions,我想使用HTTP云函数作为API。我使用Reformation作为REST客户端并发送POST请求(我使用HTTP云函数URL作为API端点)。函数读取作为POST参数发送的参数并对其进行处理,我想将函数中的某些内容作为响应传递回客户端。我该如何做? 以下是我的云函数代码: exports.Add = functions.https.onRequest((req,res)=>{ //var testPublicKey = sk_test_N63fpbFHY2pN7XAllv9D5qjw v
exports.Add = functions.https.onRequest((req,res)=>{
//var testPublicKey = sk_test_N63fpbFHY2pN7XAllv9D5qjw
var stripe = require("stripe")("stripe_key");
console.log("Token:"+req.body.Token)
console.log("Amount:"+req.body.Amount)
var tokenToCharge = req.body.Token;
const amountToCharge = req.body.Amount;
var authID = req.body.AuthID;
const databaseRef = admin.firestore();
const payer = databaseRef.collection('deyaPayUsers').doc(authID).collection('Wallet').doc(authID);
const balance = payer.Usd
stripe.charges.create({
amount : amountToCharge,
currency : "usd",
description : "charge created",
source : tokenToCharge,
}, function(err, charge) {
if(charge.status === "succeeded"){
var trans = databaseRef.runTransaction(t=>{
return t.get(payer)
.then(doc=>{
var updatedBalance = doc.data().Usd + parseInt(charge.amount);
t.update(payer,{Usd : updatedBalance});
});//return close
}).then(result=>{
console.log('Transaction success!');
}).catch(err=>{
console.log('Transaction Failure:',err);
});
}
});
});
这是我的REST客户
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(" https://us-central1-deyapay-
192704.cloudfunctions.net/tokenAmt/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
executeForm(token1,a,UID);
private void executeForm(String Token,Integer Amt,String UID){
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(" https://us-central1-deyapay-192704.cloudfunctions.net/Add/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
APIService apiservice=retrofit.create(APIService.class);
Call<PostData> call=apiservice.savePost(Token,Amt,UID);
call.enqueue(new Callback<PostData>() {
@Override
public void onResponse(Call<PostData> call, Response<PostData> response) {
if(response.isSuccessful()){
Toast.makeText(Stripe.this, (CharSequence) response.body(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<PostData> call, Throwable t) {
Toast.makeText(Stripe.this,"Failure",Toast.LENGTH_SHORT).show();
}
});
}
与Express.js类似,响应有
.status()
和.send()
只需在console.log('Transaction success!')附近添加res.status(200).send('stringized JSON')
你可以省略状态,但最好保留它。当应用程序失败时,甚至可能会发送其他状态代码?在客户端如何接收?假设代码正常工作,它将成为响应的一部分。响应回调中的body()我想从后端返回一个字符串,因此我想将response.body()作为字符串检索,但当我尝试时,响应的类型是。body()必须是PoatData,这是我的POJO类的名称。我无法真正帮助您解决问题中的android/java部分。什么是stringified JSONdisplay APIService类代码
public class PostData {
@SerializedName("Token")
@Expose
private String token;
@SerializedName("Amount")
@Expose
private Integer amount;
@SerializedName("AuthID")
@Expose
private String authID;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Integer getAmount() {
return amount;
}
public void setAmount(Integer amt) {
this.amount = amt;
}
public String getAuthID(){return authID;}
public void setAuthID(String authID){
this.authID = authID;
}
}