微信支付开发步骤:

首先去申请开通微信支付功能(亦可从网上找到申请开通的方法),这里不详细讲解了,自行百度或者按照微信提示操作,主要讲解接入过程。注册微信,主要的是得到app id和key。下面进入详细接入流程;

1.到微信商户平台,下载安卓支付的Demo

 下载地址:

https://pay.weixin.qq.com

android 微信支付调不起来微信 安卓手机微信支付_微信

2.将下载的demo的libs文件夹下的 

libammsdk.jar包,拷贝到自己项目中的libs文件夹下(见下图)

android 微信支付调不起来微信 安卓手机微信支付_json_02

3.在项目上右键,点击properties

4.添加jar包路径(见下图)

 

android 微信支付调不起来微信 安卓手机微信支付_支付_03

5.点击上图中的add jars按钮,之后,在弹出的对话框中,找到自己的项目中的libs文件夹下的libammsdk.jar文件,选中双击。 

6. 点击Order and Export按钮,勾选libammsdk.jar包,然后点击ok;(见下图)

android 微信支付调不起来微信 安卓手机微信支付_支付_04

 

7.

创建一个类继承自Application,在入口处注册微信api(在onCreate方法中写入以下代码)

 

api = WXAPIFactory 
   .createWXAPI 
   (this, Constants 
   .WXAPPID 
   , true) 
   ; 
     
   
api 
    .registerApp 
    (Constants 
    .WXAPPID 
    ) 
    ; 
     // 
    Constants 
    .WXAPPID为微信开放平台注册得到的appID8.在需要调用微信支付的地方activity里面,发送订单号和金额给你们自己的后台接口,后台根据订单号和金额去微信生成预支付订单,返回json给你,拿到json进行解析。注意:解析的时候只需要解析以下几个数据就可以了,其他不用解析(特别注意:json返回的sign签名不能使用,最后发起支付请求的sign,是你自己对要请求的参数的签名,下面会给出详情步骤)在需要调用微信支付的地方写入以下代码: 8.1 
    
// 微信支付api声明称全局变量 
 
     
api  
      =  
      WXAPIFactory 
      . 
      createWXAPI 
      ( 
      getApplicationContext 
      ( 
      ) 
      , 
      Constants 
      . 
      WXAPP_ID 
      ) 
      ;
 
     
     
        
 
     
     
           
               
      // 判断是否安装微信
 
     
     
           
               
      if  
      ( 
      ! 
      api 
      . 
      isWXAppInstalled 
      ( 
      ))  
      {
 
     
     
           
           
               
      return 
      ;
 
     
     
           
               
      }
 
     
     
           
               
      // 判断微信版本是否支持支付
 
     
     
           
               
      if  
      ( 
      api 
      . 
      getWXAppSupportAPI 
      ( 
      )  
      <  
      Build 
      . 
      PAY_SUPPORTED_SDK_INT 
      )  
      {
 
     
     
           
           
               
      return 
      ;
 
     
     
           
               
      }

 

8.2:对返回的json进行解析,解析得到以下图中红色标注的4个字段的值,其他3个字段的值是你自己这边填写的。

android 微信支付调不起来微信 安卓手机微信支付_微信支付_05

 

其他3个字段的值为: 

1.package字段的值为

package= “ Sign=WXPay ”;

2. timestamp字段的值为  timestamp= Long .toString(System.currentTimeMillis() / 1000)  ;

3. sign字段的值为(这里要根据微信给的签名算法生成签名,具体方法见下图)  这里的key,为申请微信支付时候生成 AppSecret;需要签名的6个字段,首先把这5个字段: appid, partnerid, prepayid, noncestr, timestamp, package按照字段排序进行排序,按照key=value&key2=value2的格式拼接,然后在结尾拼接上(k ey= 申请微信支付时候生成 AppSecret的值)。把拼接好的字符串 进行md5加密,得到签名sign的值 。 不懂的可以在看下图解说:

 

android 微信支付调不起来微信 安卓手机微信支付_json_06

8.3在注册清单文件中找到,调用微信支付的activity注册信息,加入下面代码:

 

<      intent 
     - 
     filter 
     >
     
               
              
     < 
     action  
     android 
     : 
     name 
     = 
     "android.intent.action.VIEW"  
     />
     
               
              
     < 
     category  
     android 
     : 
     name 
     = 
     "android.intent.category.DEFAULT"  
     />
     
               
              
     < 
     data  
     android 
     : 
     scheme 
     = 
     "你申请的appId"  
     />
     
                   
     < 
     /intent-filter>

 

9.现在拿到了调用微信支付的所有字段的值,下面就是调用微信支付了,代码如下:

 

// 给微信支付设置值,发起调用
     
PayReq       req  
     =  
     new  
     PayReq 
     ( 
     ) 
     ;
     
               
          
          
          
              
     req 
     . 
     appId  
     =  
     json 
     . 
     getString 
     ( 
     "appid" 
     ) 
     ;//json返回的值
     
               
          
          
          
              
     req 
     . 
     partnerId  
     =  
     json 
     . 
     getString 
     ( 
     "mch_id" 
     ) 
     ; 
     //json返回的值
     
               
          
          
          
              
     req 
     . 
     prepayId  
     =  
     json 
     . 
     getString 
     ( 
     "prepay_id" 
     ) 
     ; 
     //json返回的值
     
               
          
          
          
              
     req 
     . 
     nonceStr  
     =  
     json 
     . 
     getString 
     ( 
     "nonce_str" 
     ) 
     ; 
     //json返回的值
     
               
          
          
          
              
     req 
     . 
     sign  
     = sign 
     ;//这个签名是用上面的方法生成的签名
     
               
          
          
          
              
     req 
     . 
     timeStamp  
     = 
     Long 
     .toString(System.currentTimeMillis() / 1000) 
     ;//固定的值
     
               
          
          
          
              
     req 
     . 
     packageValue  
     =  
     "Sign=WXPay" 
     ;//固定的值
     
               
          
          
          
              
     // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
     
               
          
          
          
         
     
               
          
          
          
              
     api 
     . 
     sendReq 
     ( 
     req 
     ) 
     ;

10.这样就完成了调用微信支付,但是暂时还收不到支付结果,所以接下来就是要实现微信支付后的回调方法。具体方法如下:1.在你的项目中新建一个包,包名必须为wxapi,否则微信无法回调。比如你的项目包名为com.xixiangfu.test。那么就在test下新建一个包com.xixiangfu.test.wxapi; 然后将下载的微信支付的demo中的WXPayEntryActivity这个类拷贝到这个包下,记得将布局文件也拷贝过去,还有要在AndroidManifest.xml对这个activity进行注册。(如图)

 

android 微信支付调不起来微信 安卓手机微信支付_支付_07

activity注册代码如下:

<       activity
      
                          android 
      : 
      name 
      = 
      ".wxapi.WXPayEntryActivity"
      
                          android 
      : 
      exported 
      = 
      "true"
      
                          android 
      : 
      theme 
      = 
      "@android:style/Theme.Translucent"
      
                          android 
      : 
      launchMode 
      = 
      "singleTop"  
      />

  11.这时候很多人就去运行测试了,这就是一个非常大的坑,这是根本无法调用微信支付,你要做的是要给你的app进行签名,要和你微信注册的地方的签名保持一致(可以参考下微信官方给的签名设置方法 :https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 ),完成签名后才可以进行测试。 12.返回结果代码(这里如果要对展示结果的页面进行自定义,可以在这个类 WXPayEntryActivity中进行修改 )

android 微信支付调不起来微信 安卓手机微信支付_微信_08

注意: 调用微信支付,如果不能调起,或者返回-1,先检查签名(一般都是签名错误导致的,回去重新检查签名)、包名是否与开放平台上面的一致,若一致则是服务端的问题,一般是服务端签名问题。