App接入支付寶

閒得蛋疼接了一個坑死人的項目,,其中有一塊涉及到支付寶即時到帳服務,原本想使用第三方提供的服務,然而爲了安全考慮,使用阿里提供的sdk本身開發接口
首先申請支付寶帳號,順便入駐開放平臺,申請帳號完畢後,直接找到沙箱環境php

clipboard.png

在這個地方,用到的就是APP ID和支付寶的RSA2公鑰,看到這個地方,接下來咱們須要的就是支付寶的密鑰了,,爲了方便,直接下載支付寶提供的工具https://os.alipayobjects.com/...express

clipboard.png
直接這樣生成就行了,而後將公鑰提交到沙箱的公鑰裏,而後就搞定了,,私鑰本身保留好,,這樣就配置的差很少了json

而後,下載php的sdk https://openhome.alipay.com/d...
下載完成後放到服務器上,因爲阿里給的文檔不夠完善,,我看源碼找了很久,並且此前沒有接觸此類開發,,遇到了很多麻煩,這裏直接記錄下api

<?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);
?>

注意的是上面的是支付寶公鑰,,不是應用公鑰,網關不用配置,這個只是提供一個思路,具體實現就不放出來了
服務器端大致就這樣,返回值以下安全

clipboard.png

服務器到這裏就差很少了,安卓端的搭建就直接使用官方的demo修改,服務器

clipboard.png

所須要的目錄結構就是這樣了,而後直接調用接口就能夠了,代碼以下: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服務器,最後修改訂單狀態ide

相關文章
相關標籤/搜索