积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
Android-支付宝快捷支付
error997 (error997)    2015-05-10 19:11:14      目标    课题
   支付宝的快捷支付Android版业务流程比较麻烦,出现的意外情况比较多.在此,简单说下开发流程以及出现错误的解决方案;
   1.注册支付业务.这里不在赘述.建立数据安全传输所需要的私钥公钥,这里采用的是RSA算法:
   打开开发包找到如下路径,点击openssl.exe打开dos操作界面:
   输入:
   genrsa -out  rsa_private_key.pem 1024
   rsa  -in rsa_private_key.pem -pubout  -out  rsa_public_key.pem
   将生成在该目录下生成rsa_private_key.pem 和rsa_public_key.pem两个文件.
   打开支付宝的界面登陆 然后在应用模块里面把rsa_public_key.pem中的数据输入到公钥模块里,
   (关于公钥密钥的知识参考前面发表的点击打开链接);
   如该文件用文本文档打开为
   -----BEGIN PUBLIC KEY-----
xxxxxxxxxxxxxxxxxx
   xxxxxxxxxxxxxxxxxx
-----END PUBLIC KEY-----
   则我们要获取的只是-----BEGIN PUBLIC KEY-----与-----END PUBLIC KEY-----中间的内容,并把他们作为一个字符串提交到网站如下位置的地方上去:
   2.新建一个项目,设置android环境:
   1)AndroidManifest.xml配置如下:

切换到: 纯代码  
   
<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.INTERNET" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

切换到: 纯代码  
   
<activity  
    android:name="com.alipay.android.app.sdk.WapPayActivity"  
    android:screenOrientation="portrait">  
</activity>


   <activity
   android:name="com.alipay.android.app.sdk.WapPayActivity"
   android:screenOrientation="portrait">
</activity>
   >将alipay.jar放到lib目录下(照道理他会自动生成lib文件,为了保险,选择右键BuildPath>..导入);
   >将alipay_msp.apk放到asseets目录下,该包的作用是在没移动支付应用的情况下自动提供安装应用,如果不包含本包 将自动打开对应的版支付界面
   >导入alipay_lib工程作为我们工程的资源工程,该工程必须跟我们的工程在同一层级目录下,并作为android项目导入
   
点击我们的应用,右键properties属性,选择如下图:点击add将lib项目导进去;
   此时还有问题,因为android项目的原因,所以我们要把导入的资源全部顶置,不然系统有可能报资源找不到的原因;
   3)代码配置;创建key配置

切换到: 纯代码  
   
public final class Keys {  
  
    //合作身份者id,以2088开头的16位纯数字   
    public static final String DEFAULT_PARTNER = "APPID";  
  
    //收款支付宝账号   
    public static final String DEFAULT_SELLER = "ssssss@163.com";  
  
    //商户私钥,自助生成   
    public static final String PRIVATE = "";  
  
    public static final String PUBLIC = "";  
}


   public final class Keys {

   //合作身份者id,以2088开头的16位纯数字
   public static final String DEFAULT_PARTNER = "APPID";

   //收款支付宝账号
   public static final String DEFAULT_SELLER = "ssssss@163.com";

   //商户私钥,自助生成
   public static final String PRIVATE = "";

   public static final String PUBLIC = "";
}
   查找所有KeyFactory keyf = KeyFactory.getInstance("RSA");代码修改为
   KeyFactory keyf = KeyFactory.getInstance("RSA","BC");
   调用代码如参考如下:

切换到: 纯代码  
   
public class MainActivity extends Activity {  
      
    Handler mHandler=new Handler(){  
          
        public void handleMessage(Message msg) {  
            switch (msg.what) {  
            case 0x123:  
                System.out.println(msg.obj);  
                    Toast.makeText(MainActivity.this,msg.obj+"",  
                            Toast.LENGTH_SHORT).show();  
                break;  
  
            default:  
                break;  
            }  
              
              
        };  
          
    };  
  
    @SuppressWarnings("deprecation")  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
          
        String info = getNewOrderInfo();  
        String sign = Rsa.sign(info, Keys.PRIVATE);  
        sign = URLEncoder.encode(sign);  
        info += "&sign=\"" + sign + "\"&" + getSignType();  
        final String orderInfo = info;  
        new Thread() {  
            public void run() {  
                AliPay alipay = new AliPay(MainActivity.this, mHandler);  
                String result = alipay.pay(orderInfo);  
                Message msg = new Message();  
                msg.what = 0x123;  
                msg.obj = result;  
                mHandler.sendMessage(msg);  
            }  
        }.start();  
          
          
    }  
      
    private String getNewOrderInfo() {  
        StringBuilder sb = new StringBuilder();  
        sb.append("partner=\"");  
        sb.append(Keys.DEFAULT_PARTNER);  
        sb.append("\"&out_trade_no=\"");  
        sb.append("12312313124451");  
        sb.append("\"&subject=\"");  
        sb.append("商品名..");  
        sb.append("\"&body=\"");  
        sb.append("商品描述..");  
        sb.append("\"&total_fee=\"");  
        sb.append("0.01");  
        sb.append("\"&not;ify_url=\"");  
  
        // 网址需要做URL编码   
        sb.append(URLEncoder.encode("http://notify.java.jpxx.org/index.jsp"));  
        sb.append("\"&service=\"mobile.securitypay.pay");  
        sb.append("\"&_input_charset=\"UTF-8");  
        sb.append("\"&return_url=\"");  
        sb.append(URLEncoder.encode("http://m.alipay.com"));  
        sb.append("\"&payment_type=\"1");  
        sb.append("\"&seller_id=\"");  
        sb.append(Keys.DEFAULT_SELLER);  
  
        // 如果show_url值为空,可不传   
        // sb.append("\"&show_url=\"");   
        sb.append("\"&it_b_pay=\"1m");  
        sb.append("\"");  
  
        return new String(sb);  
    }  
      
    private String getSignType() {  
        return "sign_type=\"RSA\"";  
    }  
      
}


   public class MainActivity extends Activity {
   
   Handler mHandler=new Handler(){
      
      public void handleMessage(Message msg) {
         switch (msg.what) {
         case 0x123:
            System.out.println(msg.obj);
               Toast.makeText(MainActivity.this,msg.obj+"",
                     Toast.LENGTH_SHORT).show();
            break;

         default:
            break;
         }
         
         
      };
      
   };

   @SuppressWarnings("deprecation")
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      String info = getNewOrderInfo();
      String sign = Rsa.sign(info, Keys.PRIVATE);
      sign = URLEncoder.encode(sign);
      info += "&sign=\"" + sign + "\"&" + getSignType();
      final String orderInfo = info;
      new Thread() {
         public void run() {
            AliPay alipay = new AliPay(MainActivity.this, mHandler);
            String result = alipay.pay(orderInfo);
            Message msg = new Message();
            msg.what = 0x123;
            msg.obj = result;
            mHandler.sendMessage(msg);
         }
      }.start();
      
      
   }
   
   private String getNewOrderInfo() {
      StringBuilder sb = new StringBuilder();
      sb.append("partner=\"");
      sb.append(Keys.DEFAULT_PARTNER);
      sb.append("\"&out_trade_no=\"");
      sb.append("12312313124451");
      sb.append("\"&subject=\"");
      sb.append("商品名..");
      sb.append("\"&body=\"");
      sb.append("商品描述..");
      sb.append("\"&total_fee=\"");
      sb.append("0.01");
      sb.append("\"&not;ify_url=\"");

      // 网址需要做URL编码
      sb.append(URLEncoder.encode("http://notify.java.jpxx.org/index.jsp"));
      sb.append("\"&service=\"mobile.securitypay.pay");
      sb.append("\"&_input_charset=\"UTF-8");
      sb.append("\"&return_url=\"");
      sb.append(URLEncoder.encode("http://m.alipay.com"));
      sb.append("\"&payment_type=\"1");
      sb.append("\"&seller_id=\"");
      sb.append(Keys.DEFAULT_SELLER);

      // 如果show_url值为空,可不传
      // sb.append("\"&show_url=\"");
      sb.append("\"&it_b_pay=\"1m");
      sb.append("\"");

      return new String(sb);
   }
   
   private String getSignType() {
      return "sign_type=\"RSA\"";
   }
   
}
   Tip:9000错误--报系统错误的 自己检查你的公钥 密钥在网站项目配置对不,大小写要注意;以下有出现过的错误及解决方案请补充.

转自 http://blog.csdn.net/qq285016127/article/details/37903603
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累