作者: Wenwei Yang

Pay: Weixin pay

关于微信支付的调用方法。

Request

HTTP request

POST https://www.featapi.com/api/pay/order/pay/

Parameters

授权

此请求需要具有以下所有范围的授权:

Scopes
pay_trade_order

有关更多信息,请参阅认证和授权页面。

Request body

请求参数

Property nameValueDescriptionNotes
Required Properties
pay_methodinteger使用微信支付方法,必须为200。0为银联,100为支付宝,200为微信,目前仅支持这些方法。
end_typeinteger终端交易类型,0为Native二维码支付,100为移动端APP支付,200为JSAPI支付,300为H5支付。根据不同的支付方法有对应的终端交易类型。
Optional Properties
extra_paramsdict以字典的格式提交可选的额外参数。
详情请查看下文的`extra_params`说明。
范例:
{“wx_app_type”: “feat_ios_app”}

extra_params的参数:

Property nameValueDescriptionNotes
wx_app_typestring提交支付的终端向服务端声明正在使用的微信app类型。目前已对接的有”official_account”,”feat_ios_app”。不提交该值时,默认为”official_account”。比如使用”APP”支付时,就应当选择”feat_ios_app”。
如果对该值有任何疑问请及时联系后端工作人员或者运维工程师。
open_idstring微信用户标识,是对应微信app id下的唯一标识,如果同时提交”wx_app_type”参数时,要注意对应的微信app类型是否一致。在使用”JSAPI”支付时,这是必填参数。

Response

返回结果

1.当”wx_app_type”为”official_account”,end_type为0,这是”NATIVE”二维码支付。code_url是支付二维码的地址,使用二维码转换工具将该地址转换为二维码图片,即可提供用户扫描支付。以下是范例数据:

{
    "data": {
        "trade_type": "NATIVE",
        "code_url": "weixin://wxpay/bizpayurl?pr=123456",
        "prepay_id": "wx99999999999999999999999efbe47b00000"
    }
}

2.当”wx_app_type”为”feat_ios_app”,end_type为100,这是”APP”支付。以下是范例数据:

{
    "data": {
        "package": "Sign=WXPay",
        "timestamp": 1642748825,
        "prepayid": "wx99999999999999999999fa4d4bc0200000",
        "appid": "wxjifrogd7x8g09t5s",
        "partnerid": "1486158932",
        "noncestr": "e3dd9f348d8240ef81a0ada3ab1aae55",
        "sign": "D9SBS1VMZIPV6PJGHNQJRGPOWFBAPUOA"
    }
}

3.当”wx_app_type”为”official_account”,end_type为200,这是”JSAPI”支付。以下是范例数据:

{
    "appId": "wx4444aa5566666777",
    "timeStamp": 1653377557,
    "nonceStr": "70041f30d95a41cdb42d07e8e5056a09",
    "package": "prepay_id=wx2415323785101221eb9b6f10663d3b0000",
    "signType": "MD5",
    "paySign": "9147CA32DE4278800CDFF927203348E9"
}

Feat Oauth2 Token 异常列表

异常返回范例

{
    "error": "invalid_request"
    "error_description": "device_id is required"
}

其中“error”字段为异常错误的代码,“error_description”为异常错误的可读描述文本,对接时注意“error_description”字段不是一定返回的。

标准的错误代码

以下是Oauth2标准的错误代码:

invalid_request

状态代码:HTTP 400

该请求缺少必需的参数、包含不支持的参数值(授权类型除外)、重复参数、包含多个凭据、使用一种以上的机制来验证客户端,或者请求格式不正确。

注意:

  • 返回 “error_description”值为 “device_id is required”,这表示在grant_type为”password”时,请求必须带上”device_id”值。

invalid_client

状态代码:HTTP 401

客户端身份验证失败(例如,未知客户端、不包含客户端身份验证或不支持的身份验证方法)。 此时服务器返回 HTTP 401(未授权)状态代码。

invalid_grant

状态代码:HTTP 400

提交的客户端身份认证授权(例如,授权code、资源所有者身份凭据)或刷新令牌无效、已过期、已撤销、与授权请求中使用的重定向 URI 不匹配,或已派发给另一个客户端。

unauthorized_client

状态代码:HTTP 400

该客户端的身份验证无权使用该grant类型。

unsupported_grant_type

状态代码:HTTP 400

服务器不支持该grant类型。

invalid_scope

状态代码:HTTP 400

请求的scope无效或scope的格式错误或超出资源所有者授予的范围。

参考文档链接:https://datatracker.ietf.org/doc/html/rfc6749#section-5.2

Service: Status

这是服务需求项目的状态,根据需求项目的当前状态,界面需要展示对应可操作的按钮。

Status List

DRAFT = 0  # 草稿
REVIEW = 100  # 审核中(暂时未实装)
OPEN = 200  # 已发布
CLOSED = 300  # 关闭
COMPLETED = 400  # 已完成
CANCELLED = 500  # 已取消

DRAFT 草稿

调用需求创建接口成功后,创建状态为DRAFT的需求项目。此时需求处于草稿状态,待发布后才可以公开给其他用户查看或互动。

OPEN 已发布

调用需求发布接口成功后,需求状态从DRAFT变成OPEN,之后该需求会公开到机会广场中,其他用户可以查看或互动。

CLOSED 关闭

需求执行了关闭操作后,或者需求到达了关闭时间,则需求状态从OPEN变成CLOSED。在此状态下不允许有新的参与者或新的竞标出价,需求项目的拥有者需要从参与者中选出胜出者。

COMPLETED 已完成

待需求项目的拥有者选出胜出者后,需求项目进入COMPLETED状态。

CANCELLED 已取消

需求项目在在OPENCLOSED的状态下,可以调用取消操作,取消该需求项目。

Auth API:Feat手机账号注册接口流程文档

FEAT Auth API 是一组提供用户注册账号和登录账号功能的接口,FEAT网站的注册流程必须以手机号码作为注册账号,同时亦作为登录账号使用。注册过程涉及获取短信验证码、获取注册许可Token的安全认证步骤,必须按照以下步骤的顺序调用对应接口。

继续阅读

Auth: login(已弃用)

这是用户登录接口,使用场景为已经注册的用户提交正确手机号码和密码到该接口,请求成功后返回用户的Authorization Token。前端获取该Token后,在调用需要用户登录的FEAT API时,将Token配置在请求头Authorization,即可正常访问。

Request

HTTP request

POST https://www.featapi.com/api/auth/login/

继续阅读

Auth: vcode verification

这是短信验证码检验接口,使用场景为用户进行注册流程,已经调用过“短信验证码发送接口”,并且收到了短信验证码。用户输入短信验证码,前端提交参数到该接口进行验证,验证成功后,根据form_id不同,进行不同的操作。

目前支持的操作包括:

  • FEAT服务返回注册许可Token,前端使用许可Token调用注册账户接口完成注册流程。
  • FEAT服务返回用户登录key和uid。

Request

HTTP request

POST https://www.featapi.com/api/auth/phone/verification/

继续阅读