android 移動(dòng)端支付 是大部分的app 必有的功能之一 微信作為比較普及的即時(shí)通信app 接入一種比較方便支付端口是很有必要的 從支付操作難度來說 微信支付是最簡(jiǎn)單的 普及程度也是最廣的?
下面我們說一下 微信支付集成的步驟?
第一 你需要?jiǎng)?chuàng)建一個(gè)項(xiàng)目?
https://open.weixin.qq.com/?微信開放平臺(tái)地址?
注冊(cè)或者微信掃描等以后 你需要?jiǎng)?chuàng)建一個(gè)項(xiàng)目 填寫項(xiàng)目名稱 簡(jiǎn)介 logo 即可?
第二 填寫開發(fā)信息 ios 這一塊 填寫下載地址 BundleID 以及測(cè)試版的BundleID android 這一塊只需要填寫包名以及簽名即可(未發(fā)布就填寫測(cè)試版的簽名 上線以后就填寫發(fā)布版的簽名 關(guān)于獲取簽名的方法 微信官網(wǎng)有告訴你如果獲取簽名 )?
然后提交你的項(xiàng)目 等待微信審核通過 在這期間你可以下載sdk 集成微信支付的環(huán)境
支付環(huán)境配置
環(huán)境分為兩種 一是eclipse 一是 android studio
as 的環(huán)境配置很簡(jiǎn)單 直接在app 的build.gradle 下添加?
dependencies {?
compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’?
}?
就可以了?
eclipse 集成環(huán)境 你需要下載sdk 然后導(dǎo)入到libs 包下 并且添加到本項(xiàng)目關(guān)聯(lián)就好了
然后在AndroidManifast.xml 文件 配置本項(xiàng)目權(quán)限
uses-permission android:name="android.permission.INTERNET"
uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
然后你需要在你的包下新建一個(gè)文件夾 wxapi 并且在wxapi包下創(chuàng)建 WXPayEntryActivity?
注意 如果你的項(xiàng)目的包名是com.baidu.xxx 那你WXPayEntryActivity的路徑就應(yīng)該是com.baidu.xxx.wxapi.WXPayEntryActivity一定要看清楚 只需要在你包名的下一級(jí)即可 要不然會(huì)調(diào)用支付失敗
WXPayEntryActivity配置
activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"
public classWXPayEntryActivityextendsActivityimplementsIWXAPIEventHandler{ String APP_ID = "YOUR APPID";
? ? private IWXAPI api;
? ? private String sign = "";
? ? @Override? ? protected void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_wxpay_entry);
? ? ? ? api = WXAPIFactory.createWXAPI(this, 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 baseReq) {
? ? }
? ? ? ? ***// 支付回調(diào)***? ? @Override? ? public void onResp(BaseResp baseResp) {
? ? ? ? String result = "";
? ? ? ? switch (baseResp.errCode){
? ? ? ? ? ? case BaseResp.ErrCode.ERR_OK:
? ? ? ? ? ? ? ? result = "支付成功";
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case BaseResp.ErrCode.ERR_USER_CANCEL:
? ? ? ? ? ? ? ? result = "取消支付";
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case BaseResp.ErrCode.ERR_AUTH_DENIED:
? ? ? ? ? ? ? ? result = "支付失敗";
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? default:
? ? ? ? ? ? ? // result = R.string.errcode_unknown;? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? ? //? Toast.makeText(this, result, Toast.LENGTH_LONG).show();? ? ? ? onceToast(this,result+"");
? ? }
? ? //支付結(jié)果提示? ? public? void onceToast(final Context context, String contentText){
? ? ? ? final AlertDialog.Builder builder = new AlertDialog.Builder(context);
? ? ? ? View view = LayoutInflater.from(context).inflate(R.layout.oncetoast_layout, null);
? ? ? ? builder.setView(view);
? ? ? ? Button onesure = (Button) view.findViewById(R.id.oncetoast_button);
? ? ? ? TextView oncecontent = (TextView) view.findViewById(R.id.oncetoast_content);
? ? ? ? oncecontent.setText(contentText);
? ? ? ? final AlertDialog dialog = builder.create();
? ? ? ? onesure.setOnClickListener(new View.OnClickListener() {
? ? ? ? ? ? @Override? ? ? ? ? ? public void onClick(View v) {
? ? ? ? ? ? ? ? dialog.dismiss();
? ? ? ? ? ? ? ? if (sign!=null&&sign.equals(Constant.PASSENGER_PUBLISH_PAY)||sign.equals(Constant.HOST_PUBLISH_PAY)||sign.equals(Constant.CHANGE_PAY)||sign.equals(Constant.PASSENGER_ROB_PAY)||sign.equals(Constant.HOST_ROB_PAY)){
? ? ? ? ? ? ? ? ? ? Intent intent = new Intent(WXPayEntryActivity.this, CompleteActivity.class);
? ? ? ? ? ? ? ? ? ? intent.putExtra("type",BookPayActivity.completeType);
? ? ? ? ? ? ? ? ? ? intent.putExtra("text_1",BookPayActivity.text_1);
? ? ? ? ? ? ? ? ? ? intent.putExtra("text_2",BookPayActivity.text_2);
? ? ? ? ? ? ? ? ? ? startActivity(intent);
? ? ? ? ? ? ? ? ? ? AppManager.getAppManager().finishActivity(BookPayActivity.class);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? finish();
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? dialog.show();
? ? }
}
// 微信支付方法 訂單生成 和 簽名應(yīng)放在后臺(tái)服務(wù)生成
private void wXPay() {
? ? ? ? final String appId = "YOUR APPID";
? ? ? ? iwxapi = WXAPIFactory.createWXAPI(this, null); //初始化微信api? ? ? ? iwxapi.registerApp(appId); //注冊(cè)appid? appid可以在開發(fā)平臺(tái)獲取? ? ? ? Runnable payRunnable = new Runnable() {? //這里注意要放在子線程? ? ? ? ? ? @Override? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? PayReq request = new PayReq(); //調(diào)起微信APP的對(duì)象? ? ? ? ? ? ? ? //下面是設(shè)置必要的參數(shù)惶室,也就是前面說的參數(shù),這幾個(gè)參數(shù)從何而來請(qǐng)看上面說明? ? ? ? ? ? ? ? request.appId = appId;
? ? ? ? ? ? ? ? request.partnerId = wxpartnerid;
? ? ? ? ? ? ? ? request.prepayId = wxprepayid;
? ? ? ? ? ? ? ? request.packageValue = "Sign=WXPay";
? ? ? ? ? ? ? ? request.nonceStr = wxnoncestr;
? ? ? ? ? ? ? ? request.timeStamp = wxtimestamp;
? ? ? ? ? ? ? ? request.sign = wxsign;
? ? ? ? ? ? ? ? iwxapi.sendReq(request);//發(fā)送調(diào)起微信的請(qǐng)求? ? ? ? ? ? }
? ? ? ? };
? ? ? ? Thread payThread = new Thread(payRunnable);
? ? ? ? payThread.start();
? ? ? // finish();? ? }
此時(shí)就完成了微信支付 WXPayEntryActivity 特別是注意 這是微信制定的回調(diào)處理類 也就是說你可以有很多的支付調(diào)用 但是所有的結(jié)果都只能在這里拿到 關(guān)于這個(gè)類的路徑問題 應(yīng)該是你微信開放平臺(tái)上的包名下的wxapi.WXPayEntryActivity 一定要注意 還有一點(diǎn)要注意的是你的appid 如果你覺得你的appid 也是微信官方給你的 跟你的簽名同步 代表這你的app 如果你覺的你的appid 放在項(xiàng)目中不安全 你也可以放在后臺(tái)都是可以的 最后就是當(dāng)你正式版打包上線以后 要注意你在微信開放平臺(tái)上的簽名配置 一定要及時(shí)修改為發(fā)布版的簽名 不然調(diào)用支付時(shí)會(huì)失敗?
好了 見到那的微信支付就說到這里了 有什么問題你可以給我留言或私信 我們一起探討 我們一起進(jìn)步