一、网站第三方支付接口搭建配置方法
日常我们都会经常用到移动支付,很多APP会选择调用第三方支付作为支付方式,或者是用户使用移动支付应用,如微信支付或者支付宝支付。
(网站接入支付!就去优易个人免签支付平台)
微信支付
支付流程看起来挺简单,打开微信,扫一扫/APP调用微信,输入密码/按个指纹就ok了。
正常来说,使用指纹支付的时候,用户只需要按三次就可以完成支付;
点击“立即支付”,点击“确认支付”,按指纹 ;
第一个页面是生成支付订单,需要告诉用户订单名称,订单编号,支付金额和收款方 ;
细节1:考虑要提供给用户的什么信息,也就是订单信息上写什么 ;
细节2:此刻点击“取消”按钮,并不会直接退出支付,中间会弹出阻断信息,询问用户是否确认取消支付。我是这么考虑,第一,用户可能会误点,如果是误点,对于再次提交支付在心理上有一定打击;第二,用户在犹豫,可以犹豫的事情应该设置一个阻断信息。
第二个页面支付确认弹窗。这里只有收款方,支付金额和支付方式(扣款方) ;
选择一:选择支付方式 ;
选择二:指纹支付/使用密码;
在这里我是已经开通了指纹支付。在进入支付确认页面的时候还要判断用户是否开通指纹支付,开通指纹支付弹出指纹支付页面,未开通弹出密码支付页面。这里不需要用户选择。用户未开通支付方式的情况,可以在用户支付完成后提示用户开通指纹支付。
这个页面需要用户选择的是支付方式,微信会提供默认的支付方式。用户.需要变更支付方式的时候,可以点击修改。
变更支付方式有可能是默认支付方式不够钱,或者用户不想用这个方式支付。解决办法可以是换个支付方式,或者绑定新卡,也可以使用支付宝,只是微信是不会引导用户转投支付宝的。
微信支付这里设置的只有一个页面,后面两个都是弹窗。
用户在使用密码支付的时候,输入六位数的密码后不需要按确认。
对于设计支付流程需要考虑的问题:
需要提供用户什么信息?
支付来源。提供什么样的支付方式给用户选择:(网站接入支付!就去U易个人免签支付平台)
支付确认方式,密码和指纹。指纹支付是比密码支付快捷的,需要考虑是否提示用户开通指纹支付,这里又要考虑用户的硬件设备是否支持。这里可以检测用户机型,然后选择是否发出提示,支付过程中是不适合提示,所以要在支付后,提示应该只是提示一次。同时应该告诉用户取消之后在哪里可以自行开通。
在顺利的支付过程中不需要用户点击除确认外的其他按钮,并且步骤尽量少。
密码和指纹错误次数的限制。如果用户多次输入错误密码和指纹怎么处理。考虑提供找回密码的功能,怎么设置找回密码又是一个需要考虑的问题,既需要考虑到方便,也需要考虑安全
支付过程中提示动画,告诉用户在支付中,和加载中,刷新中等同理,在后台处理,用户等待的时候告诉用户现在是什么情况。
支付成功,支付失败提示等。
支付接口对接技术做多了以后你会发现,基本上所有的第三方第四方支付接口的基本方法流程就是这样,至于有些签名方式不一样,配制参数不一样等等按照其提供的技术文档要求修改一下即可。
- //配制类,填写在支付平台获取的相关信息
- class Constant {
- const USER= "QQ4770851";
- const MERCHNO = "ff8080816586cbd434358a66b0bc1525";
- const CREATE_URL = "https://xxx.com/order/create";
- const QUERY_URL = "https://xxx.com/order/query";
- const KEY = "C66604323DFA42B4864299246E04FD1B";
- }
- //签名类,按照支付平台的规则对参数进行签名
- class SignUtils {
- /** = */
- const QSTRING_EQUAL = "=";
- /** & */
- const QSTRING_SPLIT = "&";
- public static function signMD5($param, $merKey = '') {
- ksort($param);
- $arr = [];
- foreach ($param as $key => $value) {
- $arr[] = $key . self::QSTRING_EQUAL . $value;
- }
- $str = implode(self::QSTRING_SPLIT, $arr);
- return strtoupper(md5($str . self::QSTRING_SPLIT . $merKey));
- }
- }
- //请求类,发起支付请求
- class HttpUtils {
- /**
- * [post description]
- * @param [type] $url [description]
- * @param array $post [description]
- * @return [type] [description]
- */
- public static function post($url, $post = []) {
- $headers = [ "Content-type: application/json;charset='utf-8'", "Accept: application/json", "Cache-Control: no-cache", "Pragma: no-cache" ];
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
- curl_setopt($ch, CURLOPT_TIMEOUT, 60);
- curl_setopt($ch, CURLOPT_POST, TRUE);
- curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- $data = curl_exec($ch);//CURLOPT_RETURNTRANSFER 不设置 curl_exec返回TRUE 设置 curl_exec返回json(此处) 失败都返回FALSE
- curl_close($ch);
- return $data;
- }
- }
- // 支付正文开始,配制参数,发起请求
- $param = [];
- $param['merchno'] = Constant::MERCHNO;
- $param['out_trade_no'] = $_POST['rechargeId'];
- $param['subject'] = $_POST['username'];
- $param['total_amount'] = $_POST['amount'];
- $param['redirect_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/return.php';
- $param['notify_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/notify.php';
- $param['sign'] = SignUtils::signMD5($param, Constant::KEY);
- $response = HttpUtils::post(Constant::CREATE_URL, $param);
- $arr = json_decode($response,TRUE);
- header("location:".$arr['pay_url']);
二、第三方支付方式介绍
第三方支付目前常见的几种支付方式有:快捷支付、网关支付、余额支付、二维码支付(微信、支付宝)、代付、代扣等。(网站接入支付!就去优易个人免签支付平台)