支付宝接口实现移动支付一、加密解密1、网银支付普遍使用的是非对称加密算法,RSA。
二、支付宝开发者平台1、注册账号(一般是企业账号)--->创建应用--->添加功能--->申请上线--->等待审核2、配置应用环境:设置密钥(使用密钥生成器生成)三、Demo演示1、下载Android版的支付宝SDK:文档中心-->移动支付的SDK2、运行alipaydemo.3、添加相关信息:四、构建自己的Demo1、主要是PayDemoActivity类的模拟;2、导入支付宝内部的jar包;3、最重要的还是相关信息;4、源码页面package com.example.paydemoopen;import java.io.UnsupportedEncodingException;import .URLEncoder;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import java.util.Random;import com.alipay.sdk.app.PayTask;import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;publicclass MainActivity extends Activity{private EditText name_et,des_et,price_et;// 商户PID:支付宝应用中的商户idpublicstaticfinal String PARTNER ="2088221844842500";// 商户收款账号:支付宝账号publicstaticfinal String SELLER ="itcast1205@";// 商户私钥,pkcs8格式publicstaticfinal String RSA_PRIVATE="MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOdq0lS/uzkzwXnqJNhHq5vgSiQ3B sfa9fzJtQotYl1mEpyfOq1yfXfn9OXagqgiWpVmwxnzs6pwnjzoMx1nPDFOqechpHFy+1DeafLGRPLx Yiy/r6rl8oBd0EuFeeOeHpcsWuquydkaymgkKwgyTjnCi7TYx9FsiN5WmECxyNO9AgMBAAECgYBvHOg ujvyrI4GTMuxL+GWaa1/N8anMzgJsRMErSM1BASCQmReIbj92EiaRMpCngA80SuoEjPHINViU7/yS8p 2AOXanzriYvap01waxjLa/KEDGjYsffUcQe/SS+xxRoMNvrmPxuQJ4MPowUvdU2OKOtpD/GY6KIGdVv RQoKiCAdQJBAPiQ8ROiI4lY0qBrTY6pS1LrSIhrvjOT5nSeMpVtR0PYa+KiWhezmKRsixRdzSnhE7fv PhRprUCMdgtIdOUwWxcCQQDuVpXdlUr9ZwS571A6+1qRT1Jqt4emhyJeHE+gi/ETO/zqwAYuYaI/Xha /1Rt3I6GcVCAvOwXcAIXWx5Cm2XxLAkEA7VX32jdGly4obuQF+eHL+jCN4TR/N+BQe6lRwzvEgBN1b8 B1JYxmgxjg82FdNE+k9EuLixIcSzXSwJM+ilfRoQJBAM4E1mLFjB7jD/jRXp69axo0YN+SaZWPNiv3ePUkQm0H66XX+v/YsXDpGe0UfztK94W0SmXJNVVotkhkFSvEz2UCQQDJYpIfoR/EUAiGas/n1LtiD3UJ E0EEGgqDyrLPpcujE4GpOLgPhP07sOTigmXJZFCLyf9TRASkVJBPf5iIvnVx";// 支付宝公钥:指的是应用平台中支付宝提供的公钥publicstaticfinal String RSA_PUBLIC="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3v F1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60 j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB";privatestaticfinalint SDK_PAY_FLAG =1;@SuppressLint("HandlerLeak")private Handler mHandler =new Handler(){@SuppressWarnings("unused")publicvoid handleMessage(Message msg){switch(msg.what){case SDK_PAY_FLAG:{PayResult payResult =new PayResult((String) msg.obj);/*** 同步返回的结果必须放置到服务端进行验证(验证的规则请看https:///doc2/*detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&* docType=1) 建议商户依赖异步通知*/String resultInfo = payResult.getResult();// 同步返回需要验证的信息String resultStatus = payResult.getResultStatus();// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档if(TextUtils.equals(resultStatus,"9000")){Toast.makeText(MainActivity.this,"支付成功",Toast.LENGTH_SHORT).show();}else{// 判断resultStatus 为非"9000"则代表可能支付失败// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)if(TextUtils.equals(resultStatus,"8000")){Toast.makeText(MainActivity.this,"支付结果确认中",Toast.LENGTH_SHORT).show();}else{// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误Toast.makeText(MainActivity.this,"支付失败",Toast.LENGTH_SHORT).show();}}break;}default:break;}};};@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.activity_main);name_et =(EditText) findViewById(R.id.editText1);des_et =(EditText) findViewById(R.id.editText2);price_et =(EditText) findViewById(R.id.editText3);}publicvoid pay(View v){String startPay = name_et.getText().toString();String des = des_et.getText().toString();String price = price_et.getText().toString();startPay(startPay,des,price);}privatevoid startPay(String name,String des,String price){ //生成订单信息String orderInfo = getOrderInfo(name, des, price);System.out.println(orderInfo);/*** 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥泄露在代码中!*///对订单信息用私钥进行编码String sign = sign(orderInfo);try{/*** 仅需对sign 做URL编码*/sign =URLEncoder.encode(sign,"UTF-8");}catch(UnsupportedEncodingException e){e.printStackTrace();}/*** 完整的符合支付宝参数规范的订单信息*///支付串码final String payInfo = orderInfo +"&sign=\""+ sign +"\"&"+ getSignType();System.out.println(payInfo);//通过支付串码,调用支付宝客户端进行操作Runnable payRunnable =new Runnable(){@Overridepublicvoid run(){// 构造PayTask 对象PayTask alipay =new PayTask(MainActivity.this);// 调用支付接口,获取支付结果String result = alipay.pay(payInfo,true);Message msg =new Message();msg.what = SDK_PAY_FLAG;msg.obj = result;mHandler.sendMessage(msg);}};// 必须异步调用Thread payThread =new Thread(payRunnable);payThread.start();}/*** create the order info. 创建订单信息**/private String getOrderInfo(String subject,String body,String price){// 签约合作者身份IDString orderInfo ="partner="+"\""+ PARTNER +"\"";// 签约卖家支付宝账号orderInfo +="&seller_id="+"\""+ SELLER +"\"";// 商户网站唯一订单号:服务器自己给定的orderInfo +="&out_trade_no="+"\""+ getOutTradeNo()+"\"";// 商品名称orderInfo +="&subject="+"\""+ subject +"\"";// 商品详情orderInfo +="&body="+"\""+ body +"\"";// 商品金额orderInfo +="&total_fee="+"\""+ price +"\"";// 服务器异步通知页面路径//自己的服务器如果想知道致富到底有没有成功,当支付宝服务完成后,会调用此链接进行通知,此链接有自己的服务器开发人员设置orderInfo +="¬ify_url="+"\""+"http://notify.msp.hk/notify.htm"+"\"";// 服务接口名称,固定值:不用管orderInfo +="&service=\"mobile.securitypay.pay\"";// 支付类型,固定值:不用管orderInfo +="&payment_type=\"1\"";// 参数编码,固定值:不用管orderInfo +="&_input_charset=\"utf-8\"";// 设置未付款交易的超时时间:不用管// 默认30分钟,一旦超时,该笔交易就会自动被关闭。