本帖最后由 戴振良 于 2016-5-27 17:56 编辑
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="checkWeixinInstall" />
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="微信支付"
- android:onClick="weixinPay" />
复制代码 MainActivity.java如下: - public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
- public void checkWeixinInstall(View v) {
-
- }
-
- public void weixinPay(View v) {
-
- }
- }
复制代码4. 配置微信开发环境: a) 把微信Demo中的“libammsdk.jar”复制到我们的项目中 b) 把微信Demo中的清单文件中的权限复制到我们的项目中 c) 把微信Demo中的清单文件中声明的支付相关的Activity声明复制到我们的项目中。注意,微信支付需要的Activity比较特殊,只需要一个(WXPayEntryActivity),这个Activity用于接收微信支付结果,这个Activity不是在jar包中的,是在Demo源码中的,我们需要把Demo中的这个Activity复制到我们的项目中,而且包名要保持不变,直接打开WXPayEntryActivity.java文件,Ctrl + A复制所有源码,然后在我们的项目src下直接粘贴,这样会自动创建和原来一样的包名。 5. 找到微信Demo中下面的界面对应的Activity:
参照这个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 checkWeixinInstall(View v) {
- boolean isPaySupported = api.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;
- Toast.makeText(this, String.valueOf(isPaySupported), Toast.LENGTH_SHORT).show();
- }
- public void weixinPay(View v) {
- String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";
- v.setEnabled(false);
- Toast.makeText(this, "获取订单中...", Toast.LENGTH_SHORT).show();
-
- Listener<String> listener = new Listener<String>() {
- @Override
- public void onResponse(String response) {
- weixinPay(response);
- }
- };
- ErrorListener errorListener = new ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- Log.e("PAY_GET", "异常:"+error.getMessage());
- Toast.makeText(MainActivity.this, "异常:"+error.getMessage(), Toast.LENGTH_SHORT).show();
- }
- };
- Request<String> request = new StringRequest(url, listener, errorListener);
- Volley.newRequestQueue(this).add(request);
- v.setEnabled(true);
- }
- protected void weixinPay(String content) {
- Log.e("get server pay params:",content);
- JSONObject json;
- try {
- json = new JSONObject(content);
- 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
- System.out.println("packageValue = " + req.packageValue);
- Toast.makeText(this, "正常调起支付", Toast.LENGTH_SHORT).show();
- // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
- api.sendReq(req);
- }else{
- Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
- Toast.makeText(this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
- }
- } catch (JSONException e) {
- Log.d("PAY_GET", "服务器请求错误");
- Toast.makeText(MainActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show();
- }
- }
- }
复制代码
注:支付宝支付使用的的合作者id密钥等保存到了服务器端,我们这里使用的是本地的服务器,由于隐私问题服务器不能发给大家,等后面申请了网络服务器之后会把网络地址告诉大家,这样大家就可以做支付宝支付的练习了。微信支付和银联支付是官网提供了测试账号和测试的服务器端,所以这两个大家可以直接写代码练习了。
01_支付宝支付:http://bbs.itheima.com/thread-305148-1-1.html
02_银联支付:http://bbs.itheima.com/thread-305150-1-1.html |