codecamp

支付宝小程序介绍 信用借还

[TOC]

1. 产品介绍

在实物租赁行业,芝麻信用借还产品为商户对借用人是否可以享受免押金服务进行评估,并代商户向支付宝发起结算请求扣取相应费用。

1.1 产品特色

  1. 对商户的风控能力要求低。商户无须对接多个芝麻信用产品来独立判断用户的信用风险情况,由芝麻信用完成对用户的风险评估,对商户输出评估结果。
  2. 免除用户押金,优化业务使用流程,降低业务使用门槛。
  3. 集成代扣和预授权功能。免押金用户可直接代扣租金;免押金不准入的用户可使用预授权支付押金。
  4. 通过信用借还产品产生的借还订单,都会记入用户履约记录内。对于恶意逾期的数据,会影响用户信用。芝麻信用也会根据订单状态对用户提供相应的到期提醒、逾期提醒等服务。

1.2 应用场景

适用于实物租赁行业,通过芝麻信用借还为用户提供免押金服务。

1.3 使用说明

主要业务模块介绍

[免押金评估]

用户在商户业务流程里(目前仅支持支付宝生活号),选择需要借用的物品后,申请“免押金借用”,商户调用信用借还订单创建接口,页面跳转至免押金借用申请页,用户确认申请后,芝麻信用对该用户进行风险评估后,返回商户评估结果并且页面回跳至商户指定页面。同时在芝麻信用创建借用订单。 风险评估集成了芝麻信用和蚂蚁金服的风控能力,包括芝麻分、行业关注名单、身份欺诈、账户盗用冒用等能力,为用户提供全面、准确的风险评估。

[代扣签约]

对于需要支付租金的订单,芝麻信用会引导用户进行代扣签约;不需要支付租金的订单,则不需要签约代扣。(已经签约代扣的用户无须再签约)。

[预授权协议签约]

对于需要支付押金的订单,芝麻信用会引导用户进行预授权协议签约(已经签约预授权协议的用户无须再签约)。

[押金支付]

免押金风险评估不通过的用户,可“预授权支付”完成借用,用户完成后,页面同样会回跳至商户指定页面。

[订单核销]

用户归还物品后,商户必须调用信用借还订单完结接口,芝麻信用根据接口请求的情况代商户向支付宝发起相应的资金处理请求,并完结该笔订单。

[信用提醒及惩戒]

芝麻信用根据信用借还订单创建接口的参数对用户在业务各环节进行个性化、分渠道通知。如借用成功、归还成功、即将到期、逾期、扣款失败等提醒。 信用履约行为会展现在“信用守护”、“信用足迹”内,并会关联到用户的信用评估上。 逾期数据会纳入用户的负面信息及行业关注名单内,不仅影响用户信用借还服务的使用,也会使其在其它信用场景内受到限制。

资金处理能力介绍

代扣

用户申请免押金借用时,需要签订“信用借还自动扣款”协议,授权芝麻信用,当其在信用借还场景里进行消费时,借助相应的资金渠道进行扣款的方式完成相应的租金或者赔偿金的支付。 商户调用订单完结接口,通过接口参数告知芝麻信用该笔订单用户需要支付的金额及支付原因(租金或者赔偿金)。芝麻信用实时向支付宝发起代扣请求,从该用户账户内支付相应款项至商户指定收款账号(当前签约信用借还的企业账号),并从该收款账号内实时扣除相应的支付手续费用。 如若代扣失败,商户可就该笔订单发起多次代扣请求,直至扣款成功。 代扣有一定的金额限制:单笔金额在500元以上,需要用回复短信确认扣款。

预授权支付

当用户不满足免押金借用条件,且当前订单允许使用支付押金借用时,用户可按照物品押金金额进行预授权支付。预授权支付的金额,仅冻结在用户当前账户内,不会支付至商户收款账号。 商户调用订单完结接口,通过接口参数告知芝麻信用该笔订单用户需要支付的金额及支付原因(租金或者赔偿金)。芝麻信用实时向支付宝发起交易支付及剩余资金解冻,从该用户账户内支付相应款项至商户指定收款账号(当前签约信用借还的企业账号),并从该收款账号内实时扣除相应的支付手续费用。用户在申请借用时冻结的剩余金额则实时解冻,解冻的资金会原路退回。

手机网站支付

如果商家在调用归还接口时发起对用户的扣款失败,系统会自动为用户打开手机支付的入口(用户点击订单详情页,会看到有欠款的提示,并且有 去支付 的按钮),用户点击手机支付后,系统会拉起收银台,用户输入密码,确认后即可支付,如果有冻结的资金(如押金),则系统会自动为用户进行资金解冻的操作,解冻的资金会原路退回。

业务规则介绍

借还订单创建接口规则

商户需通过借还订单创建接口提供订单所需必要字段,如“物品名称”、“租金”、“借用周期数”、“押金”等,此类字段内容会直接展现在用户的“免押金借用申请页”。

  • 物品名称:不得出现违禁词语,并且需要与用户借用的实际物品相符。
  • 租金:按照物品实际费用传输。后续用于订单完结接口租金金额的校验。支持多种租金单位,如元/小时,元/天,元/次。详见技术接口文档定义。若租金为零,则不会引导用户签约代扣。
  • 租金描述:对租金进行补充描述,如“前1小时免费”等营销内容。
  • 借用周期数:该物品最长允许借用时间,超过该时间未归还的订单视为逾期订单。芝麻信用根据该时间对用户进行归还提醒及逾期提醒。
  • 押金:免押金不准入的用户需要支付的金额,即预授权支付时,支付的金额。调用订单完结接口时,支付的金额不得大于该金额。
  • 物品借用地点:用于页面展示商户信息,若无线下借用点的商户可不传。

具体页面展示见下图(该页面效果为当前版本效果,可能随着产品升级改版该视觉效果也会同步变化):

借还订单完结接口规则

调用订单完结接口时,可向用户对费用进行收款,一个借还订单仅允许一次收款,不支持多次收款。归还时可根据实际的业务规则,选择扣取“租金”或者“赔偿金”。无论是租金或者是赔偿金都不得大于物品价值; 若用户该笔借用不产生任何费用,则接口参数金额为0; 调用订单完结接口成功后,用户的借还订单状态将会被置为“已完结”; 已归还/撤销订单(即“已完结”的订单)不能再调用订单完结接口;

扣款失败处理

扣款失败的订单,订单状态仍为“借用中”,商户可针对该笔订单在一定的周期内再次调用订单完结接口。如:首次失败,进行1次重试,。

1.4应用案例

应用案例

充电宝租赁商家(来电),在线下充电宝租赁机柜上提供免押金租借充电宝服务。流程体验可关注支付宝服务窗来电。 1)借用流程

2)归还流程

1.4 准入条件

  1. 有独立的线上业务入口,为用户提供物品租借业务(“充电宝”、“雨伞”、“服装”、“玩具”等小额物品租赁业务);
  2. 有一定开发能力能够对接蚂蚁开放平台;
  3. 愿意为信用好的用户提供免押金租借服务。用户无需支付押金即可借用物品,待用户按照约定周期归还物品后,再进行相关费用(租金或者赔偿金)的结算。

1.5计费模式

该产品的调用目前处于免费期,商户无须支付费用。但是在业务流程中,用户通过支付宝向商户支付租金/押金,商户需要承担交易流量0.6%的金额作为软件服务费,在每笔交易支付成功时从收款账号中实时扣除。

2 .接入指引

接口调用流程

支付宝小程序介绍 信用借还

小程序前端接口:

信用借还订单创建(my.zmCreditBorrow)

申请借用并完成相关支付方式签约的接口。 调用此前端接口跳转至芝麻借用页面;用户完成后,回跳至商户指定页面并返回结果。 如果商家设置了应用网关地址(在小程序管理后台“设置”页面配置),会将订单创建结果通过服务端异步通知商户。 示例代码:

    my.zmCreditBorrow({
      credit_biz: "",
      out_order_no: "",
      borrow_shop_name: "",
      goods_name: "",
      product_code: "w1010100000000002858",
      rent_unit: "HOUR_YUAN",
      rent_amount: "0.10",
      deposit_amount: "0.50",
      deposit_state: "Y",
      invoke_return_url: "",
      invoke_type: "TINYAPP",
      borrow_time: "2017-04-27 10:01:01",
      expiry_time: "2017-05-27 10:01:01",
      rent_info: "2hour-free",
      success: (res) => {
        try {
          const {resultStatus, result} = res;
          switch (resultStatus) {
            case '9000':
              const callbackData = res.result.callbackData;
              const decodedCallbackData = decodeURIComponent(callbackData)
              const json = JSON.parse(decodedCallbackData.match(/{.*}/));
              const jsonStr = JSON.stringify(json, null, 4);
              if (json.success === true || json.success === 'true') {
                // 创建订单成功, 此时可以跳转到订单详情页面
                my.alert({content: '下单成功: ' + jsonStr})
              } else {
                // 创建订单失败, 请提示用户创建失败
                my.alert({content: '下单失败: ' + jsonStr})
              }
              this.setData({
                callbackData: callbackData,
                decodedCallbackData: decodedCallbackData,
                parsedJSON: jsonStr,
              })
              break;
            case '6001':
              // 用户点击返回, 取消此次服务, 此时可以给提示
              my.alert({content: '取消'})
              break;
            default:
              break;
          }
        } catch (error) {
          // 异常, 请在这里提示用户稍后重试
          my.alert({
            content: '异常' + JSON.stringify(error, null, 4)
          });
        }
      },
      fail: (error) => {
        // 调用接口失败, 请在这里提示用户稍后重试
        my.alert({
          content: '调用失败' + JSON.stringify(error, null, 4)
        });
      }
    }); 

重点业务入参说明

参数 描述
invoke_return_url 在用户创建订单操作完成后,同步回调到商户的url地址。注:是页面按钮级的回调,是用户触发的,用户可以选择不点击进入回调页面。
out_order_no 商户的借用订单号,商户级别唯一。当用户完成借用后,芝麻借还的订单号将会与商户的订单号建立关联关系,方便商户查询,同时也作为芝麻内部做幂等控制使用。推荐格式:yyyyMMddHHmmss+随机数
deposit_amount 押金,金额单位:元。注:不允许免押金的用户按此金额支付押金;当物品丢失时,赔偿金额不得高于该金额。
name 借用用户的真实姓名,非必填字段。但name和cert_no必须同时非空,或者同时为空,一旦传入会对用户身份进行校验。
cert_no 借用用户的真实身份证号,非必填字段。但name和cert_no必须同时非空,或者同时为空,一旦传入会对用户身份进行校验。
rent_settle_type 租金的结算方式,非必填字段,默认是支付宝租金结算支付merchant:表示商户自行结算,信用借还不提供租金支付能力;alipay:表示使用支付宝支付功能,给用户提供租金代扣及赔偿金支付能力;

接口详细说明点此查看

服务端接口:

信用借还订单查询(zhima.merchant.order.rent.query)

订单创建后,用户可根据商户外部订单号查询订单状态 SDK调用示例:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your_private_key","json","GBK","alipay_public_key"); // your_private_key:商户私钥;alipay_public_key:蚂蚁公钥 ZhimaMerchantOrderRentQueryRequest request = new ZhimaMerchantOrderRentQueryRequest(); request.setBizContent("{" + " \"out_order_no\":\"2016100100000xxxx\"," + // 外部订单号 " \"product_code\":\"w1010100000000002858\"" + // 信用借还的产品码,固定不变 " }"); ZhimaMerchantOrderRentQueryResponse response = alipayClient.execute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); }

信用借还订单完结(zhima.merchant.order.rent.complete)

用户归还物品后,调用该接口,完成订单的核销,并扣取相应的租金费用 用户逾期未归还物品,调用该接口,扣取物品赔偿金 如果商家设置了通知地址,会将订单完结结果异步通知商户 SDK调用示例:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your_private_key","json","GBK","alipay_public_key"); // your_private_key:商户私钥;alipay_public_key:蚂蚁公钥 ZhimaMerchantOrderRentCompleteRequest request = new ZhimaMerchantOrderRentCompleteRequest(); request.setBizContent("{" + " \"order_no\":\"100000\"," + // 信用借还订单号 " \"product_code\":\"w1010100000000002858\"," + // 信用借还的产品码,固定不变 " \"restore_time\":\"2016-10-01 12:00:00\"," + // 物品归还时间 " \"pay_amount_type\":\"RENT\"," + // 金额类型:RENT(租金),DAMAGE(赔偿金) " \"pay_amount\":\"100.00\"," + // 支付金额 " \"restore_shop_name\":\"肯德基文三路门店\"" + // 物品归还门店名称 " }"); ZhimaMerchantOrderRentCompleteResponse response = alipayClient.execute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); }

重点业务入参说明

参数 描述 order_no 芝麻信用借还平台的订单号 pay_amount_type 金额类型:RENT:租金DAMAGE:赔偿金金额类型+支付金额需要组合起来才有实际含义 pay_amount 支付金额,单位:元金额类型+支付金额需要组合起来才有实际含义 信用借还订单撤销(zhima.merchant.order.rent.cancel)

订单创建后,用户可根据订单号撤销订单。 SDK调用示例:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your_private_key","json","GBK","alipay_public_key"); // your_private_key:商户私钥;alipay_public_key:蚂蚁公钥 ZhimaMerchantOrderRentCancelRequest request = new ZhimaMerchantOrderRentCancelRequest(); request.setBizContent("{" + " \"order_no\":\"100000\"," + // 信用借还订单号 " \"product_code\":\"w1010100000000002858\"" + // 信用借还的产品码,固定不变 " }"); ZhimaMerchantOrderRentCancelResponse response = alipayClient.execute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); } 信用借还借用实体数据上传接口(zhima.merchant.borrow.entity.upload)

在线下信用借还场景中,需要商户上传借用实体(如充电宝机柜、借还门店点等)的地址位置及描述信息数据,C端用户可以在芝麻信用借还频道地图页中查看。 SDK调用示例:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2"); ZhimaMerchantBorrowEntityUploadRequest request = new ZhimaMerchantBorrowEntityUploadRequest(); request.setBizContent("{" + " \"product_code\":\"w1010100000000002858"," + " \"category_code\":\"test\"," + " \"entity_code\":\"2016000100010011\"," + " \"longitude\":\"83.66\"," + " \"latitude\":\"5.87\"," + " \"entity_name\":\"爱心雨伞\"," + " \"address_desc\":\"杭州市西湖区文三路478号\"," + " \"office_hours_desc\":\"09:00—22:00\"," + " \"contact_number\":\"0571-26888888\"," + " \"collect_rent\":\"Y\"," + " \"rent_desc\":\"5元/小时\"," + " \"can_borrow\":\"Y\"," + " \"can_borrow_cnt\":\"12\"," + " \"total_borrow_cnt\":\"20\"," + " \"upload_time\":\"2017-01-01 15:34:38\"" + " }"); ZhimaMerchantBorrowEntityUploadResponse response = alipayClient.execute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); } 重点业务入参说明

参数 描述 category_code 类目Code,传入芝麻借还规定的类目Code,其他值会认为非法参数,参数值如下:雨伞:umbrella充电宝:power_bank注意:联调测试情况下,类目Code必须传test entity_code 外部实体编号,唯一标识一个实体,如自行车编号,机柜编号注意:商户维度下,类目Code(categoryCode)+实体编号(entity_code)唯一,一个商户下相同类目code+实体编号多次调用,将按照上传时间(upload_time)更新,更新规则取最新的upload_time快照数据 can_borrow 是否可借用,Y:可借,N:不可借。如果不可借用,则不在芝麻借还频道地图展示 upload_time 实体上传时间,某一借还实体信息多次上传,以最新上传时间数据为当前最新快照,格式:yyyy-mm-dd hh:MM:ss 信用借还订单修改(zhima.merchant.order.rent.modify)

在订单创建后,可根据订单号对订单的相关信息进行修改。 SDK调用示例:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2"); ZhimaMerchantOrderRentModifyRequest request = new ZhimaMerchantOrderRentModifyRequest(); request.setBizContent("{" + " \"order_no\":\"100000\"," + " \"product_code\":\"w1010100000000002858\"," + " \"borrow_time\":\"2017-04-06 15:34:38\"," + " \"expiry_time\":\"2017-04-06 15:34:38\"" + " }"); ZhimaMerchantOrderRentModifyResponse response = alipayClient.execute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); }

重点业务入参说明

参数 描述 order_no 芝麻信用借还平台的订单号 borrow_time 1、芝麻借还订单的开始借用时间,格式:yyyy-mm-dd hh:MM:ss2、如果同时传入另一参数:应归还时间expiry_time,则传入的开始借用时间不能晚于传入的应归还时间,如果没有传入应归还时间,则传入的开始借用时间不能晚于原有应归还时间。3、borrow_time 与 expiry_time 须至少传入一个,可同时传入。 expiry_time 1、芝麻借还订单的应归还时间(到期时间),格式:yyyy-mm-dd hh:MM:ss2、传入的应归还时间不能早于原有应归还时间。3、borrow_time 与 expiry_time 须至少传入一个,可同时传入。

  1. API列表

接口名称 接口描述 my.zmCreditBorrow 信用借还订单创建 zhima.merchant.order.rent.query 信用借还订单查询 zhima.merchant.order.rent.complete 信用借还订单完结 zhima.merchant.order.rent.cancel 信用借还订单撤销 zhima.merchant.borrow.entity.upload 信用借还借用实体数据上传 zhima.merchant.order.rent.modify 信用借还订单修改

  1. 常见问题

Q:当用户选择多个物品时,怎么处理?

A:多个物品可合并为一个借还订单,统一计算物品租金、物品价值等,调用一次借还创建接口,用户只需确认一次。也可以每个物品调用一次接口,但需要用户每个物品都确认一次。

Q:当用户多个物品分次归还时,怎么处理?

A:待用户全部归还后,统一调用订单完结接口处理。

Q:虽然是免租金的,但是还是希望用户能签约代扣?

A:不支持免租金的物品必须签约代扣。只有当订单的租金大于0时,用户才需要签约代扣。

Q:用户不归还怎么处理?

A: 1)芝麻信用会对用户进行提醒,引导归还 2)芝麻信用会对逾期严重的订单,进行负面披露 3)用户可主动进行物品赔偿 4)商户可以调用订单完结接口,扣取相应费用。

Q:为什么会扣款失败,失败后怎么处理?

A:大部分原因为用户账户代扣可用资金渠道扣不到钱,导致扣款失败。芝麻信用会对用户进行提醒,商户也可以针对该笔借用订单定期调用订单完结接口进行扣款重试。

Q:有哪些情况,免押金风险评估会不通过?

A:芝麻信用对用户免押金的资格会从信用水平、身份真实性等多方面进行综合评估。通常会有芝麻分不够、有未归还的逾期订单、有其它负面行为、当前账户非本人操作等等原因。

Q:能不能对同一笔借还订单进行多次扣款?

A:目前不支持。

蚂蚁金服支付宝开发文档——第三方应用授权
支付宝小程序 二维码
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

支付宝小程序开发文档

支付宝小程序 快速示例

支付宝小程序 小程序快速示例

支付宝小程序 框架

支付宝小程序 组件

支付宝小程序组件 基础组件

支付宝小程序组件 无障碍访问

支付宝小程序 扩展组件

支付宝小程序扩展组件 UI组件

支付宝小程序 API

支付宝小程序 开发工具

支付宝小程序 云服务

支付宝小程序 Serverless

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }