Android app 第三方微信支付接入詳解
微信支付做了好幾遍了,都沒有出現什麼棘手的問題,下面一一為大家分享一下,歡迎吐槽。
還是老樣子,接入微信的支付要第一步新增微信支付官方的包libammsdk.jar
首先就處理略坑的一個問題,app應用簽名和包名的問題。
商戶在微信開放平臺申請開發應用後,微信開放平臺會生成APP的唯一標識APPID。由於需要保證支付安全,需要在開放平臺繫結商戶應用包名和應用簽名,設定好後才能正常發起支付。設定介面在【開放平臺】中的欄目【管理中心 / 修改應用 / 修改開發資訊】裡面。
如圖:
應用包名:是在APP專案配置檔案AndroidManifest.xml中宣告的package值。
應用簽名:根據專案的應用包名和編譯使用的keystore,可由簽名工具生成一個32位的md5串,在除錯的手機上安裝簽名工具後,執行可生成應用簽名串,如圖所示,綠色串即應用簽名。簽名工具下載地址
然後把該值填寫到微信開放平臺裡的應用簽名那裡。
還有一種獲取簽名的方法;
在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