转载

App接入支付宝

闲得蛋疼接了一个坑死人的项目,,其中有一块涉及到支付宝即时到账服务,本来想使用第三方提供的服务,然而为了安全考虑,使用阿里提供的sdk自己开发接口

首先申请支付宝账号,顺便入驻开放平台,申请账号完毕后,直接找到沙箱环境

App接入支付宝

在这个地方,用到的就是APP ID和支付宝的RSA2公钥,看到这个地方,接下来我们需要的就是支付宝的密钥了,,为了方便,直接下载支付宝提供的工具 https://os.alipayobjects.com/...

App接入支付宝 直接这样生成就好了,然后将公钥提交到沙箱的公钥里,然后就搞定了,,私钥自己保留好,,这样就配置的差不多了

然后,下载php的sdk https://openhome.alipay.com/d...

下载完成后放到服务器上,由于阿里给的文档不够完善,,我看源码找了好久,而且此前没有接触此类开发,,遇到了不少麻烦,这里直接记录下

<?php  
require_once './aop/AopClient.php';
require_once './aop/request/AlipayTradeAppPayRequest.php';
$c = new AopClient;
$c->gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
$c->appId = "2016080100138126";
$c->rsaPrivateKey = '私钥';
$c->format = "json";
$c->charset= "utf-8";
$c->signType= "RSA2";
$c->alipayrsaPublicKey = '支付宝公钥';
$request = new AlipayTradeAppPayRequest ();
$request->setBizContent("{/"timeout_express/":/"30m/",/"product_code/":/"QUICK_MSECURITY_PAY/",/"total_amount/":/"0.01/",/"subject/":/"1/",/"body/":/"我是测试数据/",/"out_trade_no/":/"012114575097325/"}");
echo $c->sdkExecute($request);
?>

注意的是上面的是支付宝公钥,,不是应用公钥,网关不用配置,这个只是提供一个思路,具体实现就不放出来了

服务器端大体就这样,返回值如下

App接入支付宝

服务器到这里就差不多了,安卓端的搭建就直接使用官方的demo修改,

App接入支付宝

所需要的目录结构就是这样了,然后直接调用接口就可以了,代码如下:

public void payV2(View v) {
        final String[] res = {""};
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    URL url = new URL("http://192.168.137.149/api/");
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.setConnectTimeout(6*1000);
                    if(urlConnection.getResponseCode()==200){
                        BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                        String line = "";
                        while ((line = reader.readLine())!=null ){
                            res[0] +=line;
                        }
                        Log.i("订单获取", res[0]);

                        Runnable payRunnable = new Runnable() {

                            @Override
                            public void run() {
                                PayTask alipay = new PayTask(PayDemoActivity.this);
                                Map<String, String> result = alipay.payV2(res[0], true);
                                Log.i("msp", result.toString());

                                Message msg = new Message();
                                msg.what = SDK_PAY_FLAG;
                                msg.obj = result;
                                mHandler.sendMessage(msg);
                            }
                        };

                        Thread payThread = new Thread(payRunnable);
                        EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
                        payThread.start();
                    }

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

当然,这只是最简单的使用,到这个地方就基本完成了,不过这个是使用的服务器预设的订单信息,实际应用中,应该用客户端传递数据过去,服务器返回加签的订单信息,然后客户端调用sdk支付,最后支付宝服务器,通知app服务器,最后修改订单状态

原文  https://segmentfault.com/a/1190000008188574
正文到此结束
Loading...