现在微信支付和支付宝支付已经为移动端支付的主流,上一篇就已经介绍了集成支付宝的流程,本篇不要介绍微信支付是怎么集成的。
首先:需要到微信支付开放平台申请APPID 需要应用下载地址 应用签名(利用官方提供工具,安装到手机上,在手机上获取),应用的包名必须和上线包名一样
1.到微信支付开发平台下载微信支付Demo
2.导入微信支付Demo,并运行,效果如下:
Demo可以完全支付了说明现在的Demo就已经完全配置好了微信的开发环境了,我们只需要参照这个Demo去配置我们自己的项目即可。
注:测试的Demo只支持调起一起微信支付,如需第二次可在系统设置中清除微信缓存数据即可。
3.创建一个Android项目,界面如下:
activity_main.xml如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="微信支付"
android:onClick="weixinPay" />
</LinearLayout>
MainActivity.java 如下:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void weixinPay(View v) {
}
}
4.配置微信开发环境:
a)把微信Demo中的“libammsdk.jar”复制到我们的项目中
b)把微信Demo中的清单文件中的权限复制到我们的项目中
² 把微信Demo中的清单文件中声明的支付相关的Activity声明复制到我们的项目中。注意,微信支付需要的Activity比较特殊,只需要一个WXPayEntryActivity,这个Activity用于接收微信支付结果,这个Activity不是在jar包中的,是在Demo源码中的,我们需要把Demo中的这个Activity复制到我们的项目中,这个类名不能改,且必须放到我们项目根包下面的wxapi包下。
清单文件:
<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"/>
activity注册
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
package com.itheima.a14wechatpay.wxapi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.itheima.a14wechatpay.Constants;
import com.itheima.a14wechatpay.R;
import com.tencent.mm.sdk.constants.ConstantsAPI;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
/**
* 这个Activity用于接收支付结果
*/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this, Constants.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) {
// TODO 发请求问自己公司服务器是否支付成功
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("微信支付结果: " + resp.errCode);
builder.show();
}
}
}
Constants类
public class Constants {
// APP_ID 替换为你的应用从官方网站申请到的合法appId
public static final String APP_ID = "wxd930ea5d5a258f4f";
}
5.
找到微信
Demo
中下面的按钮对应的点击事件:
参照这个Activity完成对应的功能,如下:
public class MainActivity extends Activity {
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");
}
public void weixinPay(View v) {
//===========================================修改成服务器的地址
String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";
Toast.makeText(this, "获取订单中...", Toast.LENGTH_SHORT).show();
Listener<String> listener = new Listener<String>() {
@Override
public void onResponse(String response) {
try {
weixinPay(response);
} catch (Exception e) {
e.printStackTrace();
}
}
};
ErrorListener errorListener = new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("PAY_GET", "异常:"+error.getMessage());
}
};
Request<String> request = new StringRequest(url, listener, errorListener);
Volley.newRequestQueue(this).add(request);
}
protected void weixinPay(String response) throws Exception {
// 将该app注册到微信
api.registerApp(Constants.APP_ID);
boolean isPaySupported = api.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;
if (!isPaySupported) {
Toast.makeText(this, "你没有安装微信或者你的微信版本太老", 0).show();
return;
}
JSONObject json = new JSONObject(response);
if(null != json && !json.has("retcode") ){
PayReq req = new PayReq();
//req.appId = "wxf8b4f85f3a794e77"; // 测试用appId
req.appId = json.getString("appid");
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
req.extData = "app data"; // optional
Toast.makeText(MainActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
}else{
Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
Toast.makeText(MainActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
}
}
}
到此就已经成功集成微信支付了。
支付宝支付流程在上一篇,。地址如下
http://blog.csdn.net/wangxiaohuhu1314/article/details/76191157