主要针对在App应用和网页版的支付功能(支付宝 , 微信 , 银联)开发时 , 所遇到的坑 。能填则填 。
支付宝在所有支付方式中最好开发的了 , 因为文档比较清晰 , 而且开发起来也比较简单 。因此 , 支付宝的坑是相对较少的 。
APP支付APP支付步骤为:
- 获取支付宝的配置信息 。
- 生成商家订单信息 。
- 根据订单信息生成待校验数据 。
- 生成请求给支付宝的加密字符串 。
- 将待校验数据和加密字符串拼接 , 返回给APP 。
- APP将得到的数据请求支付宝客户端进行支付 。
- 获取支付宝的配置信息 。
- 支付时需要的配置信息有:
- key: 交易安全校验码 。
- app_id:支付宝分配给开发者的应用ID 。
- 生成商家订单信息 。
- 这个步骤由商家自行生成 。支付宝那边只需要知道的订单信息为:
- subject: 必填 。商品的标题/交易标题/订单标题/订单关键字等 。
- total_amount: 必填 。订单价格 。
- out_trade_no: 必填 。商户网站唯一订单号 。
- body: 非必填 。交易的具体描述信息 。
- 根据订单信息生成待校验数据 。
- APP支付的详细请求参数: 点击查看
$sign = $alipaySubmit->buildRequestParaForApp($para_token);
- 其中 , buildRequestParaForApp 的实现为:
- 对待签名参数数组排序
/** * RSA签名 * @param $data 待签名数据 * @param $private_key_path 商户私钥文件路径 * return 签名结果 */function rsaSign($data, $private_key_path) { $priKey = file_get_contents($private_key_path); $res = openssl_get_privatekey($priKey); openssl_sign($data, $sign, $res); openssl_free_key($res); //base64编码 $sign = base64_encode($sign); return $sign;}将待校验数据和加密字符串拼接 , 返回给APP 。
$url = "";foreach ($para_token as $key => $value) { $url .= $key."=".urlencode($value)."&";}return $url."sign=".urlencode($sign);
- APP将得到的数据请求支付宝客户端进行支付 。
- APP端将拼接好的字符串拿去请求支付宝客户端即可调起支付宝进行支付 。拼接好的字符串大致如下图所示:
- 设置支付宝的配置信息 。
- 向支付宝申请新订单 , 获取支付token 。
- 携带token进行订单支付 。
- 设置支付宝配置信息 。
1.请求token的service为: alipay.wap.trade.create.direct 。
2.构造参数:
$para_token = array( "service" => "alipay.wap.trade.create.direct", // 合作者身份(partner ID) "partner" => trim($this->alipay_config['partner']), // APP使用的是RSA , 网页版使用的是MD5 "sec_id" => trim($this->alipay_config['sign_type']), // 返回的数据格式 "format" => $this->format, // 版本号? "v" => $this->v, // 唯一的请求号 "req_id" => $this->req_id, // 请求参数 "req_data" => $req_data, // 字符集 , 一般为utf8即可 。"_input_charset" => trim(strtolower($this->alipay_config['input_charset'])));
推荐阅读
- 怎么用集分宝 集分宝在支付的时候怎么使用
- 配置小程序本地开发环境的五大关键要点
- 前端开发css框架,你们知道几个?
- 软件架构-解密电商系统-秒杀的原理和开发思路
- 如何更改微信乘车码支付方式
- 微信支付电子小票上线
- 怎样使用支付宝的“声音锁”,保护账户安全
- 移动端开发,不可不知的设备像素比devicePixelRatio
- 店铺信用卡支付怎么开通 淘宝店如何开通信用卡付款
- 微信支付被限制多久可恢复使用