A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2016-5-27 17:16  /  1863 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2016-5-27 17:56 编辑

1.    到微信支付开发平台下载微信支付Demo
2.    导入微信支付Demo,并运行,效果如下:



Demo可以完全支付了说明现在的Demo就已经完全配置好了微信的开发环境了,我们只需要参照这个Demo去配置我们自己的项目即可。
注:测试的Demo只支持调起一起微信支付,如需第二次可在系统设置中清除微信缓存数据即可。
3.    创建一个Android项目,界面如下:
       只有安装了微信才可以使用微信支付,所以这里需要先判断一下是否安装了微信应用
        activity_main.xml如下
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     android:orientation="vertical">

  5.     <Button
  6.         android:layout_width="wrap_content"
  7.         android:layout_height="wrap_content"
  8.         android:text="检查是否安装微信"
  9.         android:onClick="checkWeixinInstall" />
  10.    
  11.     <Button
  12.         android:layout_width="wrap_content"
  13.         android:layout_height="wrap_content"
  14.         android:text="微信支付"
  15.         android:onClick="weixinPay" />

复制代码
MainActivity.java如下:   
  1. public class MainActivity extends Activity {

  2.         @Override
  3.         protected void onCreate(Bundle savedInstanceState) {
  4.                 super.onCreate(savedInstanceState);
  5.                 setContentView(R.layout.activity_main);
  6.         }

  7. public void checkWeixinInstall(View v) {
  8.                
  9.         }

  10.         
  11.         public void weixinPay(View v) {
  12.                
  13.         }

  14. }
复制代码
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完成对应的功能,如下:        
  1. public class MainActivity extends Activity {

  2.         private IWXAPI api;

  3.         @Override
  4.         protected void onCreate(Bundle savedInstanceState) {
  5.                 super.onCreate(savedInstanceState);
  6.                 setContentView(R.layout.activity_main);
  7.                 api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");
  8.         }
  9.         
  10.         public void checkWeixinInstall(View v) {
  11.                 boolean isPaySupported = api.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;
  12.                 Toast.makeText(this, String.valueOf(isPaySupported), Toast.LENGTH_SHORT).show();
  13.         }

  14.         public void weixinPay(View v) {
  15.                 String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";
  16.                 v.setEnabled(false);
  17.                 Toast.makeText(this, "获取订单中...", Toast.LENGTH_SHORT).show();
  18.                
  19.                 Listener<String> listener = new Listener<String>() {

  20.                         @Override
  21.                         public void onResponse(String response) {
  22.                                 weixinPay(response);
  23.                         }
  24.                 };
  25.                 ErrorListener errorListener = new ErrorListener() {

  26.                         @Override
  27.                         public void onErrorResponse(VolleyError error) {
  28.                                 Log.e("PAY_GET", "异常:"+error.getMessage());
  29.                         Toast.makeText(MainActivity.this, "异常:"+error.getMessage(), Toast.LENGTH_SHORT).show();
  30.                         }
  31.                 };
  32.                 Request<String> request = new StringRequest(url, listener, errorListener);
  33.                 Volley.newRequestQueue(this).add(request);
  34.         v.setEnabled(true);
  35.         }

  36.         protected void weixinPay(String content) {
  37.                 Log.e("get server pay params:",content);
  38.             JSONObject json;
  39.                 try {
  40.                         json = new JSONObject(content);
  41.                         if(null != json && !json.has("retcode") ){
  42.                                 PayReq req = new PayReq();
  43. //                                req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
  44.                                 req.appId                        = json.getString("appid");
  45.                                 req.partnerId                = json.getString("partnerid");
  46.                                 req.prepayId                = json.getString("prepayid");
  47.                                 req.nonceStr                = json.getString("noncestr");
  48.                                 req.timeStamp                = json.getString("timestamp");
  49.                                 req.packageValue        = json.getString("package");
  50.                                 req.sign                        = json.getString("sign");
  51.                                 req.extData                        = "app data"; // optional
  52.                                 System.out.println("packageValue = " + req.packageValue);
  53.                                 Toast.makeText(this, "正常调起支付", Toast.LENGTH_SHORT).show();
  54.                                 // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
  55.                                 api.sendReq(req);
  56.                         }else{
  57.                         Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
  58.                         Toast.makeText(this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
  59.                         }
  60.                 } catch (JSONException e) {
  61.                         Log.d("PAY_GET", "服务器请求错误");
  62.                 Toast.makeText(MainActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show();
  63.                 }
  64.         }

  65. }
复制代码

资料下载地址:https://yunpan.cn/cSELK3jPijLpn  访问密码 edc7
注:支付宝支付使用的的合作者id密钥等保存到了服务器端,我们这里使用的是本地的服务器,由于隐私问题服务器不能发给大家,等后面申请了网络服务器之后会把网络地址告诉大家,这样大家就可以做支付宝支付的练习了。微信支付和银联支付是官网提供了测试账号和测试的服务器端,所以这两个大家可以直接写代码练习了。

01_支付宝支付:http://bbs.itheima.com/thread-305148-1-1.html
02_银联支付:http://bbs.itheima.com/thread-305150-1-1.html

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马