Google Play Billing 支付后端服务器对接

写在前面

最近工作需要接入google Play Billing,看了半天的英文文档,走了很多弯路,所以在这里记录一下。

注意

1,本文记录的是Google Play Billing  是google play(谷歌商店) 的内购,需要app在商店上架。不是google pay。这个要特别注意

2,本文主要记录的是后端服务器的对接过程,Google Play Billing不需要服务器也是可以完成的支付,但是为了安全,所以需要后端服务器来验证、发货等。关于app端的一些对接,除了官方文档,可以看下Google Play In-app Billing 踩过的那些坑。

3,谷歌的官方文档写的挺好,就是英文比较难看,还是认真看最靠谱。

 

流程

可以看这里https://github.com/qiujiayu/google-play-billing

 

服务器校验

使用公钥进行验签,


func RsaVerySignWithSha1Base64(originalData, signData, pubKey string) error{
   sign, err := base64.StdEncoding.DecodeString(signData)
   if err != nil {
      return err
   }
   public, _ := base64.StdEncoding.DecodeString(pubKey)
   pub, err := x509.ParsePKIXPublicKey(public)
   if err != nil {
      return err
   }
   hash := sha1.New()
   hash.Write([]byte(originalData))
   return rsa.VerifyPKCS1v15(pub.(*rsa.PublicKey), crypto.SHA1, hash.Sum(nil), sign)
}

pubKey 是在Google Play Console 中获取的。

 

虽然说signData是google用私钥签名的,公钥验签可以防止数据篡改。但是google建议的安全做法,还是在验签之后再调用查询接口验证支付的状态。

关于这个查询分为两种:一次性产品类型和订阅产品类型

查询接口是需要授权才能调用的 是server-to-server 的授权

具体看这篇https://developers.google.com/identity/protocols/OAuth2ServiceAccount?hl=zh-cn

建议还是使用api client

你可能感兴趣的:(记录)