使用Play将文档发送到Stripe! Scala 2.5

时间:2017-06-29 14:10:34

标签: scala playframework stripe-payments multipartform-data stripe-connect

我想使用Play向Stripe发送文件! Scala 2.5。
文档说请求应该是(卷曲等效),如下所示:

curl https://uploads.stripe.com/v1/files \
   -u sk_test_BQokikJOvBiI2HlWgH4olfQ2: \
   -F purpose=dispute_evidence \
   -F file="@/path/to/a/file.jpg"

我的是:

def test: Action[MultipartFormData[TemporaryFile]] = Action(parse.multipartFormData) { request =>
  val image = request.body.file("picture").get

  val info = Map("purpose" -> Seq("identity_document"))
  val attachment =
    FilePart[TemporaryFile](
      key = "file",
      filename = "file",
      contentType = image.contentType,
      ref = image.ref)
  val formData: MultipartFormData[TemporaryFile] =
    MultipartFormData(
      dataParts = info,
      files = Seq(attachment),
      badParts = Seq.empty)

  import services.MultipartFormDataWritable.anyContentAsMultipartFormWritable

  wSClient
    .url("https://uploads.stripe.com/v1/files")
    .withAuth("secret_key", "", WSAuthScheme.BASIC)
    .post(formData)
    .map(response => println(response.body))

  Ok
}

但Stripe将此Bad Request error返回给我:

"error": {
  "type": "invalid_request_error",
  "message": "Missing required param: file.",
  "param": "file"
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这有效:

   val file = request.body.file("picture").get

      val filename = file.filename
      val contentType = file.contentType.getOrElse(logAndThrowException("Id card without content type"))

      if (contentType != "image/png" && contentType != "image/jpeg" && contentType != "image/jpg") {
        logAndThrowException("Wrong content type (jp[e]g or png required)")
      }

      val tmpFile = file.ref.file
      wSClient
        .url("https://uploads.stripe.com/v1/files")
        .withAuth(stripeTestAPIKey, "", WSAuthScheme.BASIC)
        .withHeaders("Stripe-Account" -> stripeAccount)
        .post(
          Source(
            iterable =
              FilePart("file", filename, Option("text/plain"),
                FileIO.fromPath(tmpFile.toPath)) ::
                DataPart("purpose", "identity_document") ::
                List()))