Android支付宝支払詳細

6716 ワード

微信支払参考:android微信支払詳細とピット公式ドキュメント:App支払Android統合プロセス
長い間支払いを書いたことがありますが、ずっとまとめていません.もう一度温めて、まとめてください.
gradle構成:
app moduleの下のbuild.gradleでは、次のコードに示すように依存を手動で追加します.
dependencies {
    ......
 compile files('libs/alipaySdk-20170922.jar')
    ......
}

マニフェストの変更
ビジネスアプリケーションのAndroidManifest.xmlファイルに宣言を追加します.


 



および権限宣言:







混同ルールの追加
商家応用工事のproguard-project.txtには、次のルールが追加されます.
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep class com.alipay.sdk.app.H5PayCallback {
    ;
    ;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}


これで、開発パッケージ開発リソースのインポートが完了しました.
支払インタフェース呼び出し
新しいスレッドで支払インタフェースを呼び出す必要があります.(alipay_demo実装参照)
PayTaskオブジェクトは、主に顧客に受注支払い、照会機能を提供し、現在の開発パッケージのバージョン番号を取得します.PayTask支払オブジェクトを取得して支払を呼び出します(支払動作は独立した非uiスレッドで実行する必要があります).コードの例:
//        (        )
final String orderInfo = "app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22314VYGIAGG7ZOYY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D";   //     

        Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                PayTask alipay = new PayTask(MainActivity.this);
                Map result = alipay.payV2(orderInfo, true);
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        //       
        Thread payThread = new Thread(payRunnable);
        payThread.start();


パラメータ名
パラメータの説明
String orderInfo
app支払要求パラメータ文字列は、主に商家の受注情報、key=value形式、&接続を含む.
boolean isShowPayLoading
ユーザーは商店appの内部で支払いをクリックして、財布が喚起される前の遷移としてloadingを必要とするかどうか、この値をtrueに設定すると、payインタフェースを呼び出すときにH 5支払いページを喚起したり、外部の財布支払いページloadingを喚起したりするまでloadingが消えます.(この値をtrueに設定することをお勧めします.支払いを開始するページへの移行プロセスを最適化します.)
orderStrの例は次のとおりです.パラメータの説明は「要求パラメータの説明」を参照してください.orderStrの取得はサービス側から取得する必要があります.
app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22314VYGIAGG7ZOYY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D


戻り値:このメソッドで呼び出された戻り結果、パラメータの説明は「クライアント同期戻りパラメータの説明」を参照してください.
支払結果の取得と処理
payメソッドの支払いを呼び出すと、2つの方法で支払い結果が得られます.
同期リターンクライアントは、現在支払を呼び出しているActivityのHandlerオブジェクトを介して、そのコールバック関数によって支払結果を取得します.(alipay_demo実装を参照可能)コードの例:
private Handler mHandler     = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    PayResult payResult = new PayResult((Map) msg.obj);
                    /**
                           ,               。      ,          。
                     */
                    String resultInfo = payResult.getResult();//            
                    String resultStatus = payResult.getResultStatus();
                    //   resultStatus  9000       
                    if (TextUtils.equals(resultStatus, "9000")) {
                        //             ,            。
                        Toast.makeText(MainActivity.this, "    ", Toast.LENGTH_SHORT).show();
                    } else {
                        //            ,            。
                        Toast.makeText(MainActivity.this, "    ", Toast.LENGTH_SHORT).show();
                    }
                    break;
                }
            }
        }

        ;
    };


非同期通知業者はhttpプロトコルのインタフェースを提供する必要があり、支払いを要求するパラメータに含まれ、そのkeyはnotifyに対応する.url.アリペイサーバは支払いが完了すると、POST方式でnotifyを呼び出す.urlはデータを転送します.
微信支払い&支付宝支払い
どのように2つを1つのページにカプセル化して使用するか、支付宝はHandlerコールバック(任意の場所に書くことができます).微信はWXPayEntryActivityコールバック、(位置固定)
方式1、アリペイのコールバックは任意に書くことができる以上、WXPayEntryActivityに直接書くことで、1ページ方式2、微信のパッケージのコールバックインタフェースを実現し、インタフェースを通じてデータを返信し、Android支払いパッケージ(微信+アリペイ)を参照することができる.