apicloud apicloud

注册
查看: 7554|回复: 20

[模块教程] aliPay整合过程分享(key.xml、公钥、私钥、服务器配置)

 

实习司机

UID:193464

主题:
42
帖子:
150
云币:
292

[模块教程] aliPay整合过程分享(key.xml、公钥、私钥、服务器配置)

 
7554 20 | 发表于 2015-12-2 13:59:17 |阅读模式 | |
本帖最后由 黑虎 于 2015-12-21 21:32 编辑

昨天开始整合alipay。过程分享下,也方便以后自己查阅
============================
1、在项目根目录config.xml,增加一个节点,value值个性点,好像是支付宝返回值时唯一app的身份标识
  <feature name="aliPay">
    <param name="urlScheme" value="AliPayA0000000122233333"/>
  </feature>


2、要生成openssl证书,需要生成工具。这个支付宝已经提供了。去支付宝下载集成包里就行。http://aopsdkdownload.cn-hangzho ... LE_PAY_SDK_BASE.zip
      找到“openssl”,复制整个文件到C盘根目录(其它盘也行,方便你输入命令就行)。按照“生成命令.txt”生成二个.pem文件
      如果你的APP有IOS版本的,就要做“将RSA私钥转换成PKCS8格式”的操作

      
3、进入支付宝商家后台,打开刚刚生成的“rsa_public_key.pem”文件,复制正文内容,粘贴到“合作伙伴密钥管理”,“RSA加密”->"查看密钥"。粘贴后去除空格、注释、换行。点击按钮。好了,支付宝配置完成了!
      

4、然后配置项目里。在项目根目录的"res"文件夹建立"key.xml"

        

      key.xml内容为
      <?xml version="1.0" encoding="UTF-8"?>
<security>
        <item name="aliPay_partner" value="这里是pid,商家后台里有"/>
        <item name="aliPay_seller" value="这里通常是账号,如122313@163.com"/>
        <item name="aliPay_rsaPriKey" value="MIICWwIBAAKBgQClNxID+2SvHPG/KSEwtsy……"/>
        <!--aliPay_rsaPriKey 是rsa_private_key.pem原始文件里的值,记得去空格,去换行-->
        <item name="aliPay_rsaPubKey" value="MIGfMA0GCSqGSIb3DQEBAQUAA4G……"/>
        <!--aliPay_rsaPubKey 是rsa_public_key.pem原始文件里的值,记得去空格,去换行-->
        <item name="aliPay_notifyURL" value="http://www.abc.com/index.php/Member/Pay/alipaymobilenotify"/>
        <!--aliPay_notifyURL是是异步通知地址,我采用是TP,所以没有出&=等之类特殊符号,出现了要转url转码下-->
</security>
完成此步,切记要做一次“编译自定义Loader”,否则你的key.xml是不生效的,凡是修改都要提交一次。这个官方就没提过,比较坑的。

5、可以调用alipay.pay直接支付了。当前你已经在云端引入aliapy模块了

                                                                       var obj = api.require('aliPay');
                                                                        var subject = '机电会员充值';
                                                                        var body = '机电会员充值';
                                                                        var amount = 100;
                                                                        var tradeNO = (new Date()).valueOf();//订单编号
                                                                        obj.pay({
                                                                                   subject:subject,
                                                                                    body:body,
                                                                                    amount:amount,
                                                                                    tradeNO:tradeNO
                                                                                },function(ret,err) {
                                                                                        switch (ret.code){
                                                                                                case "6001":
                                                                                                        api.toast({msg:"取消支付"});
                                                                                                        break;
                                                                                                case "9000":
                                                                                                        doUpdate();
                                                                                                        api.toast({msg:"支付完成"});
                                                                                                        break;
                                                                                                default:
                                                                                                    api.alert({
                                                                                                        title: '支付结果',
                                                                                                        msg: ret.code,
                                                                                                        buttons: ['确定']
                                                                                                    });
                                                                                                        break;
                                                                                        }
                                                                                });
        通常情况没有问题就这么过了。
6、然后就是服务器端了。服务端要收取支付宝的异步通知。根据官方文档alipay.config.php配置相关参数。切记,若你也是个不喜欢认真看文档的人,那得注意以下

                 //商户的私钥(后缀是.pen)文件相对路径
                $alipay_config['private_key_path']        = './Site/Common/alipaymobile/key/rsa_private_key.pem';//此私钥是你刚风自己用openssl生成的,直接文件替换就行了
                //支付宝公钥(后缀是.pen)文件相对路径
                $alipay_config['ali_public_key_path']= './Site/Common/alipaymobile/key/rsa_public_key.pem';//此公钥是DEMO包自带的,不可更换





7、最后一坑,我调试了一上午,支付宝能异步通知接口,但始终不执行验证结果。最终一行一确定一结果,你的服务器开启opensll了吗? ok,进服务器php.ini 去除openssl注释,重启。验证通过,编辑充值逻辑代码。完工!

本帖子中包含更多资源    您需要 登录 才可以下载或查看,没有帐号?立即注册

2

查看全部评分

主题:
1077
帖子:
4833
云币:
2147218643

圣诞节捣蛋鬼APICloud大会专属勋章足球狗儿童节快乐

发表于 2015-12-2 19:19:58 |
感谢分享

主题:
56
帖子:
298
云币:
1159
发表于 2015-12-3 00:22:25 |
           $alipay_config['ali_public_key_path']= './Site/Common/alipaymobile/key/rsa_public_key.pem';//此公钥是DEMO包自带的,不可更换


这个文件就就是你提供的下载包里的那个rar文件里的pem吗?

主题:
51
帖子:
206
云币:
112

一周年圣诞节

发表于 2015-12-3 09:04:35 |

感谢分享

业余车手

UID:22414

主题:
8
帖子:
815
云币:
12667

版主勋章APICloud粉丝

发表于 2015-12-3 10:18:41 |
感谢分享

实习司机

UID:193464

主题:
42
帖子:
150
云币:
292
 楼主| 发表于 2015-12-3 13:18:28 |
清风师爷 发表于 2015-12-3 00:22
$alipay_config['ali_public_key_path']= './Site/Common/alipaymobile/key/rsa_public_key.pem ...

是的。官方包里自带的

主题:
0
帖子:
13
云币:
121
发表于 2015-12-19 15:51:47 |
感谢高手分享,学习ing

主题:
13
帖子:
679
云币:
1141

中秋节APICloud粉丝圣诞节女朋友装逼侠单身狗

发表于 2016-2-3 15:51:37 |
感谢分享 , 谢谢

新手上路

UID:98617

主题:
4
帖子:
7
云币:
109
发表于 2016-2-4 09:33:34 |
谢谢啦  

新手上路

UID:108982

主题:
17
帖子:
111
云币:
149
发表于 2016-2-22 17:04:14 |
感觉把私钥写在客户端不安全啊
123下一页
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表