Android app 第三方微信支付接入詳解


微信支付做了好幾遍了,都沒有出現什么棘手的問題,下面一一為大家分享一下,歡迎吐槽。
還是老樣子,接入微信的支付要第一步添加微信支付官方的包libammsdk.jar

首先就處理略坑的一個問題,app應用簽名和包名的問題。

商戶在微信開放平台申請開發應用后,微信開放平台會生成APP的唯一標識APPID。由於需要保證支付安全,需要在開放平台綁定商戶應用包名和應用簽名,設置好后才能正常發起支付。設置界面在【開放平台】中的欄目【管理中心 / 修改應用 / 修改開發信息】里面。
如圖:

這里寫圖片描述

應用包名:是在APP項目配置文件AndroidManifest.xml中聲明的package值。
應用簽名:根據項目的應用包名和編譯使用的keystore,可由簽名工具生成一個32位的md5串,在調試的手機上安裝簽名工具后,運行可生成應用簽名串,如圖所示,綠色串即應用簽名。簽名工具下載地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk,下載到手機上運行(該手機上必須要有你正式打包簽名的那個apk),如下圖;

這里寫圖片描述
然后把該值填寫到微信開放平台里的應用簽名那里。

還有一種獲取簽名的方法;
在Studio工具里面開發的話,在Terminal 窗口里面輸入命令 keytool -v -list -keystore keystore.jks(keystore.jks是你簽名的時候生成的文件,寫上你自己文件的名字),運行即可看到。MD5;…一大串數……這樣的一串,這就是簽名。;
在eclipse工具里面開發的話。打包的時候會看到的。MD5;…一大串數……(去掉里面的冒號,大寫改成小寫的填到微信開放平台里的應用簽名那里)

一。配置文件Androidmanifest

        <activity  android:name=".teacher.ui.PayActivity" android:label="@string/app_name" android:exported="true" android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="wx690b9cf56a4ec056"/> //寫入你的appid
            </intent-filter>
        </activity>

二。調起微信支付

PayActivity里面
在onCreate里面初始化IWXAPI

    public static final String APP_ID = "wx690b9cf56a4ec056";
    private IWXAPI api;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_affirm_order);
        api = WXAPIFactory.createWXAPI(AffirmOrderActivity.this, APP_ID, true);
        api.registerApp(APP_ID);
    }

發起支付代碼
你沒有看錯,就只有這么點代碼,里面需要的值你們自己的后台會返回的,拿過來塞到里面就好

            PayReq req = new PayReq();
            req.appId = APP_ID;
            req.partnerId = "";
            req.prepayId = "";
            req.packageValue = "";
            req.nonceStr = "";
            req.timeStamp = "";
            req.sign = "";
            api.sendReq(req);
            //以上代碼就是發起微信支付的方法

三。支付結果的處理

這里面分為兩步
1,微信提供的支付結果的類叫WXPayEntryActivity,
   微信開放平台有個 不成文的規定(文檔里沒有說明),就是回調的Activity必須是:你的包名+.wxapi.WXPayEntryActivity.java

如下;

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{


    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText("支付結果");
        setContentView(tv);
        api = WXAPIFactory.createWXAPI(this, AffirmOrderActivity.APP_ID);
        api.handleIntent(getIntent(), this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq req) {
    }

    @Override
    public void onResp(BaseResp resp) {

        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("提示");
            builder.setMessage(getString(R.string.pay_result_callback_msg,                                             String.valueOf(resp.errCode)));
            builder.show();
        }
    }
}
//回調中errCode值
// 0 成功 展示成功頁面
//-1 錯誤 可能的原因:簽名錯誤、未注冊APPID、項目設置APPID不正確、注冊的APPID與設置的不匹配、其他異常等。
//-2 用戶取消 無需處理。發生場景:用戶不支付了,點擊取消,返回APP。
2,在配置文件Androidmanifest注冊WXPayEntryActivity 
   <activity
            android:name="(你的包名).wxapi.WXPayEntryActivity"
            android:exported="true"//這一句一定不能少
            android:launchMode="singleTop" />

至此app端的微信就搞定了,當然還有后台去回調,但是和app沒關系。

歡迎入群一起學習 QQ群 548629089


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM