最近做了一个基于微信,alipay的支付功能,主要包括alipay的wap(唤醒支付宝APP),pc,APP支付,前两者基于MD5签名,后者基于RSA签名;
微信的内部浏览器支付,APP支付,至于wap,需要申请,达到一定的条件才能审批通过,目前只有京东,1号店及一些企业公司有唤醒微信APP.
这里主要说下:alipay的APP接口与微信APP的支付接口。

前期准备工作就不说了,比如要创建APP应用(会有应用私钥与公钥),相关的支付宝key,secret等信息根据官方文档引导即可。

一.Alipay的APP接口支付(mobile.securitypay.pay)
1.构造支付宝支付信息

$param = array('partner' => $this->_payBaseConfig['partner'],'seller_id' => $this->_payBaseConfig['partner'],'out_trade_no' => time().$param['tradeNo'],//唯一订单号'subject' => 'demo',//标题'body' => 'demo',//描述'total_fee' => '1',//金额'notify_url' => 'http://www.xxx.org/notify.php'//回调地址'service' => 'mobile.securitypay.pay',//alipay的服务接口'payment_type' => '1',//支付类型'_input_charset' => 'utf-8',//编码'it_b_pay' => '30m',//超时时间'show_url' => 'm.xxx.com',//商品展示网址"sign_type" => 'RSA',//签名方式'extra_common_param' => $userId . "_" . $userName . "_" . $classId . "_" . $orderId . "_" . $relOrderId,//附加参数
);

注:参数的详解见官方文档:点击打开链接
2.将$param生成给支付宝的参数数组,
a.首先去掉空值和签名的参数,以key="value"方式,并用&拼接参数,
b.过滤后的参数,进行签名,

c.在将生成的签名与签名方式追加到a步骤后面

各个步骤分别详见SDK中的

paraFilter($param);//过滤参数
buildRequestMysign(param);签名

前两部OK,就是上面所说的追加参数,上面c步骤

注意:
1.给APP提供接口,APP支付RSA是utf-8的,所以这里一定要注意:进行buildRequestMysign(param)签名的时候,一定要将待签名的数据转换成utf-8与APP的私钥进行签名,之后签名后,追加到未转码的待签名数据后面,返给APP端。否则APP端最后拿到参数请求支付宝会报"创建交易异常,请重新创建交易再支付"。

2.如果你用的的RSA密钥为pem格式文件,必须严格遵守pem格式,否则在执行openssl_get_privatekey($preKey)这个函数会一直返回false.为了避免格式错误,你可以写段代码处理下合格的密钥文件,代码如下:

private function rsaSign($data, $privateKeyPath) {$privateKey = file_get_contents($privateKeyPath);$privateKey=str_replace("-----BEGIN RSA PRIVATE KEY-----","",$privateKey);$privateKey=str_replace("-----END RSA PRIVATE KEY-----","",$privateKey);$privateKey=str_replace("\n","",$privateKey);$privateKey="-----BEGIN RSA PRIVATE KEY-----".PHP_EOL .wordwrap($privateKey, 64, "\n", true). PHP_EOL."-----END RSA PRIVATE KEY-----";$res=openssl_get_privatekey($privateKey);if($res){openssl_sign($data, $sign,$res);}else {exit('The format of your private_key is incorrect!');}openssl_free_key($res);$sign = base64_encode($sign);return $sign;
}

最终APP需要拿到这样的参数,才可以正常支付,如下:

partner="2010201647691275"&seller_id="2010201647691275"&out_trade_no="Q2F4ZPP68CKKW9T"&subject="1"&body="我是测试数据"&total_fee="0.02"¬ify_url="http://www.xxx.com"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&show_url="m.alipay.com"&sign="kPaDQ9iDseaQOymN4sOJKDCr6PF5S%2FFzsyeBwMVzJZBXXasuH3OF2n8AN%2B8F%2FhM6oBr3tSF6PAyXxl6925gSBq6tBzRGPRbc40y85O5O%2FTDLcYYR0Ggmph4G5Wo%2BCtEaMeCBI%2Fdywd2eZGGQfqkWeAiffvtpRUwzukMs%2BMqB7SE%3D"&sign_type="RSA",

Aliapy支付回调问题,是否被恶意篡改,是否是来自于支付宝发起的(参数中返回的notify_id),验签问题,验证完毕,进行相关业务处理。支付宝回调返回的数组,如下:

$ret = array ('discount' => '0.00',//折扣'extra_common_param' => '1_2_1_101083_848081256280252416',//附加参数'payment_type' => '1',//支付类型 1商品 2购买'subject' => '我是测试','trade_no' => '2017040121001004720227329601',支付宝交易号'buyer_email' => '15503333339',//买家支付宝账号'gmt_create' => '2017-04-01 15:55:12','notify_type' => 'trade_status_sync','quantity' => '1',//购买数量'out_trade_no' => '201704011010831491033308','seller_id' => '2010201647691275','notify_time' => '2017-04-01 15:55:13','body' => '我是测试','trade_status' => 'TRADE_SUCCESS','is_total_fee_adjust' => 'N','total_fee' => '0.01','gmt_payment' => '2017-04-01 15:55:13','seller_email' => 'xo.xox@xox.com.cn','price' => '0.01','buyer_id' => '2010201647691275','notify_id' => '3f7414c9ab17a53e48003a20fea9319lp2',//判断成功之后使用getResponse方法判断是否是支付宝发来的异步通知。'use_coupon' => 'N','sign_type' => 'RSA','sign' => 'hiOXQN4VopsSZ3ST4RFhdbjNz2/cwcE7nplV8o+AkdJhoeddasauQaWXUe40gYy5lSVYLmCYeVkc7g+L22gHfCvdLZMJg05/iefLsujolXWgBICBUydpdPduc0ad0UFc3yfcFWBBEFf4RTViGQfgIFfP9XbiytAv9nqGLdUO/uzbM1Ts=',
)

注意:验签时候是支付宝的公钥,登录了平台后,有很多应用查看支付宝公钥,以为就是这个。那你就会卡在openssl_verify这步,一直返回false.请登录登录b.alipay.com,查看支付宝公钥.官方貌似没有明确指明到底用哪个支付宝公钥,可能是我粗心没看到。我问了技术,技术看了下公钥,正确啊。之后利用我提供的报文模拟了验签,模拟了大约1个多小时,告诉我公钥没有问题,就用这个,还指出支付时候的附加参数不能加,这样导致了验签不过。真是呵呵了。

支付宝APP支付接口-PHP相关推荐

  1. PHP支付宝APP支付接口

    1-1:首先下载支付宝官方SDK,我的是PHP版的,起名"alipay" 下载地址:https://docs.open.alipay.com/54/103419/ 1-2:配置文件 ...

  2. 对接支付宝App支付和网页支付接口详解

    之前在项目中使用过支付宝的沙箱测试支付和实际开发支付,是关于App对接支付宝接口的,由于前段时间有朋友询问怎么对接网页支付,通过研究支付包的开发文档,在这里总结一下对接支付宝的App支付接口和网页支付 ...

  3. 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)

    java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写      一.流程步骤          1.执行流程            当手机端app(就是你公司开发的app) ...

  4. java后端实现集成支付宝APP支付(沙箱环境)

    沙箱环境集成支付宝APP支付后端实现 前言 获取支付宝相关信息 整体开发流程 1.获取核心参数 2.将支付宝SDK集成到项目中 3.后台使用支付宝SDK与支付宝进行交互逻辑 1.将支付宝公共信息参数写 ...

  5. java SpringBoot 对接支付宝 APP支付 证书模式及非证书模式

    一. 添加maven依赖 sdk <dependency><groupId>com.alipay.sdk</groupId><artifactId>al ...

  6. 这样可以几分钟快速对接支付宝APP支付和手机网站支付

    这个接口主要是实现企业支付宝APP支付已经签约完成的,想对接到手机网站实现手机网站支付来用的. 如果对接到PC网站,用户支付的时候就是扫码支付,网站出付款码,用户扫码完成支付. 如果对接到APP平台, ...

  7. 可以几分钟快速对接支付宝APP支付和手机网站支付?

    这个接口主要是实现企业支付宝APP支付已经签约完成的,想对接到手机网站实现手机网站支付来用的. 如果对接到PC网站,用户支付的时候就是扫码支付,网站出付款码,用户扫码完成支付. 如果对接到APP平台, ...

  8. fastadmin 微信支付宝整合插件 支付宝APP支付 ALIN10146

    1.调试微信支付宝整合插件支付宝APP支付,支付宝支付一直报错 ALIN10146调了6个小时 我使用的是 微信支付宝整合插件,以下为我调用支付的代码 $params = ['amount'=> ...

  9. 支付宝app支付功能-服务端的实现-python3版

    支付宝app支付功能-服务端的实现-python3版 一:需求说明 二:支付宝app支付处理流程 三:所需依赖 3.1 依赖库 3.2 支付配置 3.2.1 沙箱环境配置 3.2.2 正式环境配置 四 ...

  10. 支付宝APP支付Java服务端

    支付宝APP支付Java服务端: 公司项目要求对接支付宝进行支付功能,这边做出整理方便以后使用(支付宝的支付对接还是很简单的). 1):去支付宝开放平台,-1.注册账号,2.创建应用 3.配置应用 4 ...

最新文章

  1. Check Dependency 2(一个检查.net部署文件完整性及一致性工具)
  2. org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI
  3. 读《DTS分析模型、设计模型》有感
  4. linux报文高速捕获技术对比--napi/libpcap/afpacket/pfring/dpdk/xdp
  5. Zookeeper 在Linux系统的安装
  6. LintCode 13. Implement strStr()
  7. 【NodeJs】用WebStorm创建Express项目时出现:express version is unavailable
  8. fmea第五版pfmea表格_解读第五版FMEA“六步法”(附第五版FMEA表单下载)
  9. nodejs生成pdf文件
  10. 率辉c语言,C语言真题
  11. idea安装jclasslib和BindEd,以及使用
  12. 从MyEclipse转战到IntelliJ IDEA的经历
  13. Lambda表达式的练习1
  14. 枚举类型、枚举名称、枚举值
  15. css3波浪动画特效
  16. 修改Cisco交换机ntp服务器,Cisco交换机时间服务(NTP)的设置步驟
  17. [C++][muduo]1-muduo安装和运行
  18. git多个commitId 合并成一个
  19. TCP三次握手详解:传输控制块TCB以及积极和消极的连接建立方式
  20. 加密世界将迎来以太坊的“黄金十年”

热门文章

  1. 爱班级电脑端下载|二维码签到
  2. 51 nod 2070 最小罚款
  3. 群晖docker安装青龙面板自动狗东京豆领取
  4. OpenWrt TL-WR841N WAN口down问题
  5. 阿里、华为登顶商科工科最具吸引力雇主;国家电网、京东方等入选全国企业科技创新百强 | 美通企业日报...
  6. 查找算法-跳跃表(SkipList)入门及复杂度分析
  7. 史上最全recyclewView集合,下拉刷新,上拉加载,左滑删除,点击按钮滑动到指定位置
  8. MapWinGIS4.9.3的二次开发
  9. codelite交叉编译动态库学习记录
  10. tps 、qps、bps、Bps的含义