Android第三方微信支付教程
做了微信支付,下載了Demo,發(fā)現(xiàn)和之前有所改動(dòng),v3.0的版本,也許有的朋友還在摸索,這里我已經(jīng)成功支付,話不多說(shuō),直接進(jìn)入主題:
一、首先要在微信開(kāi)發(fā)平臺(tái)注冊(cè)賬號(hào),新增應(yīng)用,填寫正確的包名,正確的簽名(MD5中的一串字符冒號(hào)去掉,全部小寫),當(dāng)然也會(huì)生成的AppID和AppSecret都有用!最后還要花300大洋開(kāi)通支付功能!
二、分析一下微信支付的流程

三、界面交互流程

上面都看明白了,接下來(lái)就是寫代碼了
四、這里必須要有wxapi這個(gè)包名,同時(shí)必須有WXPayEntryActivity這個(gè)類名

五、在AndroidManifest.xml里面配置相關(guān)信息
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 啟動(dòng)主頁(yè)面 -->
<activity
android:name=".ui.activity.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="wx487898a262d23df3" />
</intent-filter>
</activity>
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:label="@string/title_activity_wxpayentry"
android:launchMode="singleTop" />
<receiver
android:name=".wxpay.AppRegister"
android:permission="com.tencent.mm.plugin.permission.SEND" >
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
</intent-filter>
</receiver>
/**
* 首先調(diào)用接口,要把一些基本信息作為參數(shù)傳給服務(wù)器
* 比如:金額fee,用戶id,標(biāo)題title等
* 調(diào)用成功之后會(huì)返回微信所需要的參數(shù),如:
* appid,noncestr,package,partnerid,prepayid,
* timestamp,sign
* 微信支付
*/
StringBuffer sb = new StringBuffer();
WeixinPay wpay;
private AlertDialog mDialog;
private AlertDialog.Builder builder;
public void weixinPay() {
// 通過(guò)WXAPIFactory工廠,獲取IWXAPI的實(shí)例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
// 將該app注冊(cè)到微信
api.registerApp(Constants.APP_ID);
// 調(diào)用接口
Params p = new Params();
p.put("fee",fee);
p.put("spbill_create_ip", NetWorkUtils.getLocalIpAddress(this));
String value = "商品標(biāo)題 " + title;
try {
String title = new String(value.getBytes("UTF-8"));
p.put("body", title);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
p.put("userId", O.getUser().getId());
p.post(C.URL.WEIXIN_PAY, new ReHandler() {
@Override
public void onSuccess(NetEntity entity) {
wpay = entity.toObj(WeixinPay.class);
PayReq req = new PayReq();
req.appId = wpay.getAppid();// 微信appId
req.packageValue = wpay.getPackageValue();// 包
req.extData = "app data"; // optional
req.timeStamp = wpay.getTimeStamp();// 時(shí)間戳
req.partnerId = wpay.getPartnerId();// 商戶號(hào)"
req.prepayId = wpay.getPrepayId();// 預(yù)支付訂單號(hào)
req.nonceStr = wpay.getNonceStr();// 隨機(jī)字符串
req.sign = wpay.getSign();// 后臺(tái)返回的簽名
// 本地再次簽名
List<NameValuePair> signParams = new LinkedList<NameValuePair>();
signParams.add(new BasicNameValuePair("appid", req.appId));
signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));
signParams.add(new BasicNameValuePair("package",req.packageValue));
signParams.add(new BasicNameValuePair("partnerid",req.partnerId));
signParams.add(new BasicNameValuePair("prepayid", req.prepayId));
signParams.add(new BasicNameValuePair("timestamp",req.timeStamp));
req.sign = genAppSign(signParams);
// 調(diào)微信支付
if(api.isWXAppInstalled()&&api.isWXAppSupportAPI()){
api.sendReq(req);
}else{
builder = new AlertDialog.Builder(WXPayEntryActivity.this);
builder.setNeutralButton("關(guān)閉",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDialog.dismiss();
}
}).setTitle("友情提醒").setMessage("請(qǐng)安裝微信客戶端");
mDialog = builder.create();
mDialog.show();
}
}
@Override
public void onStart() {
}
@Override
public void onFailure(String message) {
}
});
}
private String genAppSign(List<NameValuePair> params) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < params.size(); i++) {
sb.append(params.get(i).getName());
sb.append('=');
sb.append(params.get(i).getValue());
sb.append('&');
}
sb.append("key=");
sb.append(Constants.API_KEY);
this.sb.append("sign str\n" + sb.toString() + "\n\n");
String appSign = MD5.getMessageDigest(sb.toString().getBytes());
Log.e("orion", appSign);
return appSign;
}
六、在WXPayEntryActivity類里面成功之后回調(diào)方法onResp()
@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if(resp.errCode==-2){
Toast.makeText(this,"取消付款!", Toast.LENGTH_LONG).show();
}
if(resp.errCode==-1){
Toast.makeText(this,"支付錯(cuò)誤!", Toast.LENGTH_LONG).show();
}
if(resp.errCode==0){
queryOrder();//查詢接口調(diào)用后臺(tái)服務(wù)器查詢是否成功
}
}
最后做完之后,一定要簽名打包,這個(gè)是微信的獨(dú)家秘笈,你忘了就會(huì)跳出-1,呵呵。
最后總結(jié)一下支付返回-1的情況
1.檢查微信后臺(tái)的簽名,包名是否正確
2.工程是否簽名打包
3.如果之前做過(guò)測(cè)試顯示過(guò)-1的情況,必須清除微信的清除數(shù)據(jù),重新登錄微信
4.后臺(tái)服務(wù)器是否按照要求第一次簽名,第二次簽名,如果第二次簽名不對(duì),那我們就自己再次簽名一次,我的代碼里面寫了
以上就是微信支付的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)微信支付功能
- 微信支付僅能成功調(diào)用一次問(wèn)題的解決方法(Android)
- Android支付寶和微信支付集成
- 新版Android studio導(dǎo)入微信支付和支付寶官方Demo問(wèn)題解決大全
- Android微信支付開(kāi)發(fā)問(wèn)題
- android仿微信支付寶的支付密碼輸入框示例
- Android微信支付獲取二次簽名Sign的方法
- Android 高仿微信支付數(shù)字鍵盤功能
- Android編程實(shí)現(xiàn)的微信支付功能詳解【附Demo源碼下載】
- Android實(shí)現(xiàn)微信支付的統(tǒng)一下單
相關(guān)文章
Android的Launcher啟動(dòng)器中添加快捷方式及小部件實(shí)例
這篇文章主要介紹了在Android的Launcher啟動(dòng)器中添加快捷方式及窗口小部件的方法,包括在自己的應(yīng)用程序中添加窗口小部件AppWidget的例子,需要的朋友可以參考下2016-02-02
Android Studio如何快速導(dǎo)入jar和.so文件
這篇文章主要介紹了Android Studio如何快速導(dǎo)入jar和.so文件的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-12-12
Android開(kāi)發(fā)之背景動(dòng)畫簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了Android開(kāi)發(fā)之背景動(dòng)畫簡(jiǎn)單實(shí)現(xiàn)方法,涉及Android背景動(dòng)畫簡(jiǎn)單設(shè)置與使用技巧,需要的朋友可以參考下2017-10-10
Android中AlertDialog 點(diǎn)擊按鈕后不關(guān)閉對(duì)話框的功能
本篇文章主要介紹了Android中AlertDialog 點(diǎn)擊按鈕后不關(guān)閉對(duì)話框的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
Android 通過(guò)Base64上傳圖片到服務(wù)器實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Android 通過(guò)Base64上傳圖片到服務(wù)器實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05

