资讯落地项目中,涉及财联社文章和栏目的付费流程,APP为方便客户使用,引入支付宝与微信支付的第三方支付方式,对于前端H5来说,实现起来并不困难,现将整个购买流程总结如下。

一、支付前对风险等级的校验

    对于证券类app中的客户,一般进行支付交易等之前,需要对产品的风险等级和用户的风险等级做适当性的判断,适当性匹配才可以进入支付流程。故点击支付按钮,我们并不会立马调用支付api,通用的做法是调用封装好的风险匹配检测方法,并通过回调函数的方式,当匹配时调用购买流程:

NavUtil.checkRiskLevel(productRiskLevel, () => {

        _go2Pay();

      });

二、支付流程

    支付完整流程为以下几个主要步骤:

  • 首先调用创建订单接口,传入所需的相关参数(如支付方式,价格,产品信息等),在这一步骤有一个需要注意的点,就是一般我们需要传入一个callbackUrl,也就是之后支付完成后需跳转的页面地址:

    let { pathname } = window.location;

    let callbackUrl = '';

    callbackUrl = ${pathname}#/pay/result?orderId=;

  • 创建订单接口返回结果,返回结果会包含一个根据callbackUrl生成的地址,根据这个地址,我们调用三方支付的方法;
  • 三方支付方法:

此方法中的type-支付方式(支付宝,微信),content-生成的地址(订单结果页面);

在三方支付方法中设置了“支付处理中”页面的跳转地址: ${origin}${pathname}#/payment/paying?type=${type};

在store中存入订单结果页面的地址,然后跳转“支付处理页面”;

go2ThirdPay(type, content) {

let { origin, pathname } = window.location;

let url = ${origin}${pathname}#/payment/paying?type=${type};

window.localStorage.setItem(STORAGE_KEY.PAYMENT_CONTENT, content);

console.debug('go2ThirdPay->', url, content);

setTimeout(() => {

jumpToAppView({

url,

hasBottomBar: 0,

hasTitle: 0,

hasVideo: 0

});

}, 200);

}

  • 支付处理页面做了些什么?

支付处理页面是一个中间过渡页面,解决了微信放弃支付时返回的跳转混乱问题,在支付处理中间页面,做了如下几件事情:

(1)展示loading支付中标志

(2)调用支付方法,首先从store中获取之前存入的订单结果页面地址;

(3)根据支付方式,选用不同的方式唤起三方支付app。

对于支付宝支付的方式,创建一个div包裹元素,将回调地址放入其中,表单提交即可唤起:

let div = document.createElement('div');

div.innerHTML = payContent;

document.body.appendChild(div);

document.forms[0].submit();

对于微信支付的方式,直接将浏览器地址设为回调地址即可

window.location.href = payContent;

03-05 20:32